Python 烧瓶插座.io在螺纹中不工作
我有一个python服务器,它运行一个线程并通过websocket发出信号:Python 烧瓶插座.io在螺纹中不工作,python,sockets,flask,Python,Sockets,Flask,我有一个python服务器,它运行一个线程并通过websocket发出信号: def read_serial(): while True: ... socketio.emit("fire", {'n': 1}, namespace='/test') app = Flask(__name__) app.config['SECRET_KEY'] = '32ed21l31f9031kd93' app.debug = True socketio = SocketIO(
def read_serial():
while True:
...
socketio.emit("fire", {'n': 1}, namespace='/test')
app = Flask(__name__)
app.config['SECRET_KEY'] = '32ed21l31f9031kd93'
app.debug = True
socketio = SocketIO(app)
...
@socketio.on('connect', namespace='/test')
def test_connect():
emit('my response', {'data': 'Connected'})
...
if __name__ == '__main__':
thread = Thread(target = read_serial)
thread.start()
socketio.run(app, use_reloader=True)
在客户端,我有下一个代码:
var socket = io.connect('http://' + document.domain + ':' + location.port + "/test");
socket.on('fire', function(data){
fireTimer(data.n);
});
连接正在工作,但没有按预期方式触发事件。您的虚拟环境中是否安装了eventlet或gevent?如果是,哪一个?您是否在
read\u serial
功能中执行任何可能被阻塞的操作?这可能就是问题所在。@Miguel我也有同样的问题。我已经安装了eventlet。应用程序运行时已建立连接,但事件未建立连接fire@Zion用你的代码写一个单独的问题。正如我上面所说的,我的猜测是你正在做一些阻碍的事情,当你使用eventlet或gevent时,这些事情是不可能发生的,但是在没有看到你所做的事情之前,不能真正告诉你细节。@Miguel没关系,我让它工作了。这是一个重要的问题。我目前正在遵循您推荐的可伸缩文件夹结构,并使用应用程序工厂,似乎与导入存在一些冲突,但已解决。但现在的问题是。如果您需要执行socketio.run(app)
torun
theapp
当您在heroku时,如何执行该操作?@Zion on on heroku您必须使用gunicorn来运行服务器。请参阅Flask SocketIO文档。还要注意的是,目前版本19.x中存在一个可疑的gunicorn bug,它阻止websocket在Heroku中工作。gunicorn的18.0版本运行良好。