热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

vue与flaskwebsocket实时通信问题

前端用的vue,后端用的flask,有个路由需要使用websocket通信,现在是可以通信了,但后端怎么把数据实时的推给前端呢?后端在后面一直while循环推送的话,则访问其它的路由

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

python:

1
2
3
4
5
6
7
8
9
10
    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
},

sockets 的异步需要 eventlet 和 gevent 的加持
另外不建议 flask 使用 sockets
换个思路 socketio 更适合 flask


推荐阅读
author-avatar
青青河边羊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有