我正在尝试将定时消息从Websocket服务器中继到客户端。因此,某条消息在2秒后出现,另一条消息在4秒后出现,另一条消息在13秒后出现,依此类推。
我正在将python用于服务器。为了安排这些事件,我使用了一个事件安排程序。如果我只是打印,这一切都可以正常工作,但是当我将打印功能更改为websocket.send时,一切都会失败。
s = sched.scheduler(time.time, time.sleep)
events = []
async def hello(websocket, path):
name = await websocket.recv()
print(f"< {name}")
greeting = f"Hello {name}!"
#await websocket.send(greeting)
await websocket.send('connected')
print(f"> connected")
start_message = await websocket.recv()
if start_message == "ready":
await websocket.send('triggered')
create_schedule(websocket)
def print_message(msg, ):
print(msg)
websocket.send(msg) #fails here
def create_schedule(ws):
for x in events:
s.enter(x[0], 1, print_message, argument=(x[1],))
s.run()
start_server = websockets.serve(hello, 'localhost', 8765)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
还值得注意的是,如果在主websocket函数中的websocket.send之前没有“等待”,则客户端不会收到任何东西。我尝试过将websocket向下传递到create_schedule,然后传递到打印功能,但无济于事。
我想主要目标是能够发送定时的websocket事件,因此,如果可以实现,那就太好了。这是我当前选择的路径,显然有一些我没有掌握的基本问题。