首页 文章

我可以使用Python3.6 Sanic检测websockets中的'connection lost'吗?

提问于
浏览
1

当我的Python3.6 Sanic Web服务器与客户端应用程序失去联系时(例如:用户关闭Web浏览器或网络失败等等),我可以检测到(如果是的话?)

from sanic import Sanic
import sanic.response as response

app = Sanic()


@app.route('/')
async def index(request):
    return await response.file('index.html')


@app.websocket('/wsgate')
async def feed(request, ws):
    while True:
        data = await ws.recv()
        print('Received: ' + data)
        res = doSomethingWithRecvdData(data)
        await ws.send(res)



if __name__ == '__main__':
    app.run(host="0.0.0.0", port=8000, debug=True)

1 回答

  • 3

    解决了

    from sanic import Sanic
    import sanic.response as response
    from websockets.exceptions import ConnectionClosed
    
    app = Sanic()
    
    
    @app.route('/')
    async def index(request):
        return await response.file('index.html')
    
    
    @app.websocket('/wsgate')
    async def feed(request, ws):
        while True:
            try:
                data = await ws.recv()
            except (ConnectionClosed):
                print("Connection is Closed")
                data = None
                break
            print('Received: ' + data)
            res = doSomethingWithRecvdData(data)
            await ws.send(res)
    
    if __name__ == '__main__':
        app.run(host="0.0.0.0", port=8000, debug=True)
    

相关问题