使用 websockets lib 和 Python3.7 启动服务器的适当方法

Posted

技术标签:

【中文标题】使用 websockets lib 和 Python3.7 启动服务器的适当方法【英文标题】:Appropriate way to start a server using the websockets lib and Python3.7 【发布时间】:2019-02-28 17:41:36 【问题描述】:

documentation for the library 表明以下代码应该可以处理并且确实有效:

start_server = websockets.serve(hello, 'localhost', 8765)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

但是新的 Python-3.7 asyncio library 添加了asyncio.run,它“运行passes coroutine”“应该用作异步程序的主要入口点。” 此外,当查看上面使用的documentation for the get_event_loop() 时,它会显示:

应用程序开发人员通常应该使用高级 asyncio 函数,例如 asyncio.run()...

我尝试通过以下方式使用 run:

server = websockets.serve(hello, 'localhost', 8765)
asyncio.run(server)

我从中得到:

ValueError: a coroutine was expected, got <websockets.server.Serve object at 0x7f80af624358>
sys:1: RuntimeWarning: coroutine 'BaseEventLoop.create_server' was never awaited

然后我尝试通过以下方式将服务器包装在一个任务中:

server = asyncio.create_task(websockets.serve(handle, 'localhost', 8765))
asyncio.run(server)

我从中得到:

RuntimeError: no running event loop
sys:1: RuntimeWarning: coroutine 'BaseEventLoop.create_server' was never awaited

由于最后一个警告,我也尝试了:

async def main():
  server = asyncio.create_task(websockets.serve(hello, 'localhost', 8765))
  await server
asyncio.run(main())

我得到同样的错误。我在这里想念什么? 此外,如果 asyncio.run 没有启动运行循环,它会做什么?

【问题讨论】:

【参考方案1】:

这应该可行。 wait_closed 是您一直在寻找的等待。

 async def serve():                                                                                           
      server = await websockets.serve(hello, 'localhost', 8765)
      await server.wait_closed()

 asyncio.run(serve())

【讨论】:

【参考方案2】:

其实应该是这样的: 等待(等待服务器).wait_closed() 因为服务器没有wait_close函数。

【讨论】:

以上是关于使用 websockets lib 和 Python3.7 启动服务器的适当方法的主要内容,如果未能解决你的问题,请参考以下文章

将 c++ wss 服务器与 websocket++ 或其他 c++ websocket lib 一起使用

如何使用 Python(带有 websockets 的服务器)和 JavaScript(客户端)接收 JSON 数据

linux Ubuntu14.04 make编译文件报错:No rule to make target `/usr/lib/libpython2.7.so', needed by `pytho

如何将 websocket 推送 api 输出写入文本文件?

caffe pytho接口

如何在debian服务器上安装discord lib(websocket错误)