我可以在使用Python3.6 Sanic的websockets中检测'连接丢失'吗?

我可以在使用Python3.6 Sanic的websockets中检测'连接丢失'吗?

问题描述:

我可以检测到(如果是如何?)当我的Python3.6中信高科Web服务器失去了与客户端应用程序的连接(例如:用户关闭Web浏览器或网络故障等)我可以在使用Python3.6 Sanic的websockets中检测'连接丢失'吗?

 

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) 

解决

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)