首页 > 解决方案 > 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进程。
- 有一些处理正在进行,其中涉及登录网站并获取数据以及分页。
- 结果存储在一个变量中,然后服务器将此结果发送回客户端。
- 在客户端,结果显示在控制台上。
- 所以这只会发生一次,如果我再次点击“点击我”按钮而不刷新,将再次启动该过程,数据将被获取并存储在一个变量中,但这次“发射”功能不会出于某种原因工作。

所以我的问题是,即使我不刷新页面,是否会多次发出工作(在函数返回数据之后)?

标签: javascriptpythonpython-3.xsocket.ioflask-socketio

解决方案


推荐阅读