javascript - Flask Socketio 页面每次都需要刷新才能发出消息
问题描述
所以我有一个 Python socketio 脚本,它登录到一个网站进行一些处理,然后将结果存储到一个变量中。这个 selenium 进程是在一个函数中定义的,当用户从前端点击一个按钮时触发这个函数。一个简短的片段我所做的事情发布在下面:
from flask import Flask, render_template
from flask_socketio import SocketIO
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
def selenium_process(data):
(Some process that involves selenium)
values = stores the result
..
..
..
return values
@socketio.on('message')
def handle_message(message):
dataval = selenium_process(data)
socketio.emit('showresult',dataval)
if __name__ == '__main__':
socketio.run(app,host='my_ip',port=random_port)
这是作为客户端的 html + js 文件示例:
<html>
<head>
<script src='http://code.jquery.com/jquery-1.7.2.min.js'></script>
<script src='http://localhost:3001/socket.io/socket.io.js'></script>
<script>
<button onclick="myFunction()">Click me</button>
var socket = io.connect('http://localhost:3001');
function myFunction()
{
data = {}
socket.emit('message',data);
}
socket.on('showresult') {
console.log(data);
});
</script>
</head>
</html>
虽然代码工作正常,但是当 selenium 进程完成时,python 服务器只发出一次回 js 客户端。之后我需要手动刷新网页,然后发出以在前端获取消息。
我犯了什么错误?
编辑:
过程:
- 我点击了js客户端上的“点击我”按钮,它调用了python服务器端的selenium进程。
- 有一些处理正在进行,其中涉及登录网站并获取数据以及分页。
- 结果存储在一个变量中,然后服务器将此结果发送回客户端。
- 在客户端,结果显示在控制台上。
- 所以这只会发生一次,如果我再次点击“点击我”按钮而不刷新,将再次启动该过程,数据将被获取并存储在一个变量中,但这次“发射”功能不会出于某种原因工作。
所以我的问题是,即使我不刷新页面,是否会多次发出工作(在函数返回数据之后)?
解决方案
推荐阅读
- google-cloud-platform - 当 Gcloud 可以看到 GCSfuse “Unknown bucket”。服务帐户似乎正确
- reactjs - Redux 状态在功能组件中无法正常工作
- typescript - TypeScript 类通用约束
- python - Matplotlib 仅适用于标记样式图,我该如何解决?
- javascript - 使用 javascript 从通过 USB 端口连接到笔记本电脑的多个摄像头捕获视频
- vb.net - 引用 Twilio dll 时需要自签名证书
- python - 如果您的数据具有单个特征,则使用 array.reshape(-1, 1) 重塑您的数据,如果它包含单个样本,则使用 array.reshape(1, -1)
- c# - 解析包含时区的日期字符串,例如 21/07/2011 10:42 AM BST
- ruby-on-rails - 使用 Pundit 2 设置 rails_admin - 我需要 rails_admin_pundit gem 吗?没有怎么办?
- python - 将多个文件夹中的镶木地板文件读入 sagemaker 时,Jupyter 内核死机