weixin_46498520 2021-07-27 11:07 采纳率: 0%
浏览 204

flask实现websocket,用ws协议,模块是geventwebsocket

img

为什么我的socket是none啊
这边的socket是直接从requests获取的

代码是:

from geventwebsocket.handler import WebSocketHandler
from geventwebsocket.server import WSGIServer
from geventwebsocket.websocket import WebSocket  # 语法提示

from flask import Flask, request,render_template,abort

app = Flask(__name__)

@app.route('/')
def base():
    return render_template('wsClient.html')

socketList = []

@app.route('/ws')
def ws():
    socket = request.environ.get('wsgi.websocket')  # type:WebSocket
    socketList.append(socket)
    print(socket)
    while True:
        msg = socket.receive()
        print(msg)
        for i in socketList:
            if msg =='一号模式':
                i.send('一条龙服务')
            elif msg =='二号模式':
                i.send('一条蛇服务')
            else:
                i.send('啥也不是')
    return '200 ok'

if __name__ == '__main__':
    # app.run('0.0.0.0',5000)
    httpServer = WSGIServer(listener=("0.0.0.0", 5000), application=app, handler_class=WebSocketHandler)
    httpServer.serve_forever()

  • 写回答

2条回答 默认 最新

  • CSDN专家-showbo 2021-07-27 17:18
    关注

    测试了你的代码没问题,不过有点要稍微调整下socket断开的问题,会得到None信息,并且要从socketList移除对象,要不断开的socket对象调用send会出错.有帮助麻烦点个采纳【本回答右上角】,谢谢~~

    img

    from geventwebsocket.handler import WebSocketHandler
    from geventwebsocket.server import WSGIServer
    from geventwebsocket.websocket import WebSocket  # 语法提示
    from flask import Flask, request,render_template,abort
    app = Flask(__name__)
    @app.route('/')
    def base():
        return render_template('wsClient.html')
    socketList = []
    @app.route('/ws')
    def ws():
        socket = request.environ.get('wsgi.websocket')  # type:WebSocket
        socketList.append(socket)
    
        while True:
            if socket.closed:#当前链接断开要退出,并从集合中移除
                socketList.remove(socket)
                break
            msg = socket.receive()
            print(msg)
            if msg!=None:#None是其他用户链接或者断开发送的
                for i in socketList:
                    if msg =='一号模式':
                        i.send('一条龙服务')
                    elif msg =='二号模式':
                        i.send('一条蛇服务')
                    else:
                        i.send('啥也不是')                 
        return '200 ok'
    @app.route("/chat")
    def chat():
        return render_template("chat.html")
    if __name__ == '__main__':
        # app.run('0.0.0.0',5000)
        httpServer = WSGIServer(listener=("0.0.0.0", 5000), application=app, handler_class=WebSocketHandler)
        httpServer.serve_forever()
     
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 7月27日

悬赏问题

  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误