首页 > 解决方案 > 我可以在 socketio 上下文之外发出 Flask-SocketIO 消息吗?

问题描述

从我的 python 烧瓶网络服务器(烧瓶 socketio 服务器)发出的消息没有到达 javascript socketio 客户端。

在 socketio 上下文中,一切正常。

我已经阅读了这里有关该问题的所有主题......所以我包含了 monkey.patch,尝试将 eventlet 作为 async_mode 并添加了一些其他提示,所以我现在得到了以下代码库:

app = Flask(__name__)
app.secret_key = "zISMDCwvfJY2TXHMKHrB" 
sio = SocketIO(app, async_mode='eventlet')
eventlet.monkey_patch()

@app.route('/index')
def index():
    someotherfunction()
    return render_template('index.html')

@sio.event
def my_event(message):
    print(message)

@sio.event
def hello(message):
    sio.emit('hello', {'data': 'got it!'})
    print(message)

def someotherfunction():
    with app.app_context():
        sio.emit('hello', {'data': 'got it123123!'}, namespace='/')

if __name__ == "__main__":
    sio.run(app, host="localhost", port="8080", debug=True)

这里是socketio客户端部分:

<script type="text/javascript" charset="utf-8">
        var socket = io();
        socket.on('connect', function()
        {
            socket.emit('my_event', {data: 'I\'m connected!'});
        });
        socket.on('hello', function(data)
        {
            console.log(data);
        });
    </script>

所以 'hello' 函数会在请求后成功发出数据,但 someotherfunction() 不会向客户端发出任何数据。

标签: flask-socketio

解决方案


推荐阅读