[英]I always get errors in closing handshake of Websockets in Python
I've coded a little server and client with Python3, Asyncio and Websockets. 我已经用Python3,Asyncio和Websockets编写了一个小的服务器和客户端代码。
I generate just for testing random numbers from a array, parse them into json and send them as websocket to the server. 我生成的只是用于测试数组中的随机数,将其解析为json并将其作为websocket发送到服务器。 But often I get many errors because of closing handshakes. 但是由于握手频繁,我经常遇到很多错误。
Here is the code: 这是代码:
Server: 服务器:
import asyncio
import websockets
import json
async def receiver(websocket, path):
ws = await websocket.recv()
print("< {}".format(ws))
start_server = websockets.serve(receiver, 'localhost', 8765)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
Client: 客户:
import asyncio
import websockets
import json
from array import *
import random
async def randomNumbers():
while True:
numbers = array('i', [1, 2, 3, 4, 5, 6, 7, 8, 9])
random.shuffle(numbers)
await sendWebsocket(numbers[0])
await asyncio.sleep(1)
async def sendWebsocket(number):
async with websockets.connect('ws://localhost:8765') as websocket:
ws = json.dumps({"number": number})
await websocket.send(ws)
print("> {}".format(ws))
loop = asyncio.get_event_loop()
try:
asyncio.ensure_future(randomNumbers())
loop.run_forever()
finally:
print("Client1 closed")
loop.close()
Error: 错误:
Error in closing handshake
Traceback (most recent call last):
File "C:\Users\dgred\AppData\Local\Programs\Python\Python36-32\lib\site-packages\websockets\server.py", line 145, in handler
yield from self.close()
File "C:\Users\dgred\AppData\Local\Programs\Python\Python36-32\lib\site-packages\websockets\protocol.py", line 370, in close
self.timeout, loop=self.loop)
File "C:\Users\dgred\AppData\Local\Programs\Python\Python36-32\lib\asyncio\tasks.py", line 358, in wait_for
return fut.result()
File "C:\Users\dgred\AppData\Local\Programs\Python\Python36-32\lib\site-packages\websockets\protocol.py", line 642, in write_frame
"in the {} state".format(self.state.name))
websockets.exceptions.InvalidState: Cannot write to a WebSocket in the CLOSING state
Can anyone help me here? 有人能帮我一下吗?
Thanks! 谢谢!
Here is a slight modification of your server side: 这是您的服务器端的略微修改:
import asyncio
import websockets
import json
import signal
async def receiver(websocket, path):
while True:
try:
ws = await websocket.recv()
print("< {}".format(ws))
except websockets.ConnectionClosed:
print("Connection closed")
break
async def simple_server(stop):
async with websockets.serve(receiver, 'localhost', 8765):
await stop
loop = asyncio.get_event_loop()
stop = asyncio.Future()
loop.add_signal_handler(signal.SIGTERM, stop.set_result, None)
loop.run_until_complete(simple_server(stop))
There are more official examples available on websocket's GitHub websocket的GitHub上还有更多官方示例
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.