vue 与 flask websocket 实时通信问题

2020-12-23 19:28:34 +08:00
 taomujian

前端用的 vue,后端用的 flask,有个路由需要使用 websocket 通信,现在是可以通信了,但后端怎么把数据实时的推给前端呢?后端在后面一直 while 循环推送的话,则访问其它的路由会失败,如果后端开多线程的话,会报 socket 死亡的问题,无法通信.

python:

 	from flask_sockets import Sockets
  	@sockets.route('/msg')
    def echo_socket(ws):
        response_data = {'code': '', 'message': '', 'data': '', 'total': ''}
        try:
            if request.method == 'GET':
                user_socker = request.environ.get('wsgi.websocket')
                request_data = json.loads(user_socker.receive())
                t1 = threading.Thread(target = check_status, args=(request_data, user_socker,), daemon = True)
                t1.start()
             

报错信息: user_socker.send(json.dumps(response_data)) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/geventwebsocket/websocket.py", line 347, in send raise WebSocketError(MSG_SOCKET_DEAD) geventwebsocket.exceptions.WebSocketError: Socket is dead

vue:

initWebSocket() { //初始化 weosocket const wsuri = 'ws://127.0.0.1:8800/msg' //ws 地址 this.websock = new WebSocket(wsuri) this.websock.onopen = this.websocketonopen this.websock.onmessage = this.websocketonmessage this.websock.onerror = this.websocketonerror this.websock.onclose = this.websocketclose },

2330 次点击
所在节点    Python
7 条回复
Latin
2020-12-24 12:05:23 +08:00
sockets 的异步需要 eventlet 和 gevent 的加持
另外不建议 flask 使用 sockets
换个思路 socketio 更适合 flask
Latin
2020-12-24 12:05:42 +08:00
flask-socketio
taomujian
2020-12-24 13:46:23 +08:00
@Latin flask-socketio 这个库不支持 http 的请求,与其它的请求不能共存,这就有点难受了😣
Latin
2020-12-24 14:25:44 +08:00
@taomujian 支持的 我每个项目里都用
wzwwzw
2020-12-25 00:00:22 +08:00
flask-socketio 应该是最优的选择了,只不过在部署的时候会麻烦一些。
taomujian
2020-12-25 10:37:01 +08:00
@Latin 好的,谢谢,我再试试
taomujian
2020-12-25 10:37:21 +08:00
@wzwwzw OK

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/738370

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX