我在服务器端创建了一个套接字端点,如下所示:
from client import sockio_client
from flask_socketio import SocketIO
from flask import Flask
app = Flask(__name__)
socketio = SocketIO(app)
@socketio.on('status_update')
def status_update(data):
print('got something: ',data)
@app.before_first_request
def start_ws_client():
# now that server is started, connect client
sockio_client.connect('http://localhost:5000')
if __name__ == "__main__":
socketio.run(app,debug=True)
以及相应的客户:
import socketio
from threading import Thread
sockio_client = socketio.Client()
# wait to connect until server actually started
# bunch of code
def updater():
while True:
sockio_client.emit('status_update', 42)
time.sleep(10)
t = Thread(target=updater)
t.start()
我有一个后台线程在服务器外部运行,我想用它定期发出的数据更新客户端。我确信有不止一种方法可以做到这一点,但我提出的两个选项是:(I)通过将update函数封装在一个对象或闭包中(该对象或闭包引用了socketio
对象),将上面server.py
中的socketio
对象的引用传递给客户机中的update函数,或者(ii)只需使用后台作业中的websocket客户端与服务器通信即可。选择一只是觉得有趣,所以我选择了(二),感觉。。。奥基什
显然,在连接客户端之前,服务器必须先运行,所以我想我可以使用before_first_request
装饰器来确保我只在服务器启动后才尝试连接客户端。然而,每次我尝试时,我都会得到:
socketio.exceptions.ConnectionError: Connection refused by the server
此时服务器肯定正在运行,但不接受任何连接。如果我要注释掉server.py
中的sockio_client.connect
,并从一个完全独立的脚本进行连接,那么一切都会按预期进行。我做错了什么?还有,如果有更好的方法,请把它拆开
目前没有回答
相关问题 更多 >
编程相关推荐