Python gevent socketio从线程发送消息
我想使用gevent socketio从工作线程发送消息,并更新所有连接的客户端的作业状态 我试过这个:Python gevent socketio从线程发送消息,python,flask,socket.io,gevent,gevent-socketio,Python,Flask,Socket.io,Gevent,Gevent Socketio,我想使用gevent socketio从工作线程发送消息,并更新所有连接的客户端的作业状态 我试过这个: from flask import Flask, render_template from flask.ext.socketio import SocketIO, send, emit import threading import time app = Flask(__name__) app.config['SECRET_KEY'] = 'secret!' socketio = Sock
from flask import Flask, render_template
from flask.ext.socketio import SocketIO, send, emit
import threading
import time
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
@socketio.on('message')
def handle_message(message):
send(message, broadcast=True)
@app.route('/')
def index():
return render_template('index.html')
def ping_thread():
while True:
time.sleep(1)
print 'Pinging'
send('ping')
if __name__ == '__main__':
t = threading.Thread(target=ping_thread)
t.daemon = True
t.start()
socketio.run(app)
这给了我一个错误:
RuntimeError: working outside of request context
如何从没有@socketio.on()
装饰器的函数发送消息?我可以直接使用gevent
向socketio
发送消息吗?来自:
有时,服务器需要是消息的发起人。这对于向客户端发送源自服务器的事件通知非常有用。socketio.send()和socketio.emit()方法可用于向所有连接的客户端广播:
此
emit
不是来自flask.ext.socketio导入socketio,send,而是从socketio=socketio(app)
调用您的socketio
变量。如果您完成了socketio\u connection=socketio(app)
,那么您将调用socketio\u connection.emit()
来广播您的数据。我实际上在文档中没有看到该部分(哦!)。但这正是我试图做的(见上面的代码),对我来说似乎不起作用。你正在调用emit
,但链接上说要调用socketio.emit
,谢谢你的反馈,@Celeo。我已经更新了我的帖子以包含更多的代码。如您所见,我直接导入emit
和send
,而不是socketio
,所以这不是我的问题。
def some_function():
socketio.emit('some event', {'data': 42})