通过其他功能发送网络套接字服务器消息

时间:2019-02-28 14:01:34

标签: python-3.x websocket

我正在尝试将定时消息从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事件,因此,如果可以实现,那就太好了。这是我当前选择的路径,显然有一些我没有掌握的基本问题。

0 个答案:

没有答案