You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python websockets库:哪类可准确代表WebSocket连接及三类差异

关于websockets库中WebSocket连接对象类型的疑问

我在使用Python的websockets库时,遇到了WebSocket连接对象的多种描述方式,不知该如何选择。

文档中启动服务器的示例代码非常简洁:

import asyncio

from websockets.asyncio.server import serve

async def hello(websocket):
    name = await websocket.recv()
    print(f"<<< {name}")

    greeting = f"Hello {name}!"

    await websocket.send(greeting)
    print(f">>> {greeting}")

async def main():
    async with serve(hello, "localhost", 8765) as server:
        await server.serve_forever()

if __name__ == "__main__":
    asyncio.run(main())

但直接复制这段代码后,IDE无法识别.recv()和.send()方法。于是我开始查找该WebSocket对象的类型,发现可以使用以下三类:

  • websockets.ServerConnection
  • websockets.server.ServerConnection
  • websockets.asyncio.server.ServerConnection

我认为它们提供的方法一致,但不确定是否存在显著差异,能否混用?另外文档提到asyncio服务器实现会在客户端连接时创建websockets.asyncio.server.ServerConnection实例,那另外两类的作用是什么?


解答

类型差异与适用场景

这三个ServerConnection本质是同一类的不同导入路径别名,对应websockets库的版本兼容逻辑:

  • websockets.asyncio.server.ServerConnection:这是当前官方推荐的asyncio运行时专属实现,也是文档中asyncio服务器创建的连接类型,属于最新版本的标准类型。
  • websockets.server.ServerConnection:旧版本的导入路径,为兼容早期代码保留的别名,当前版本中内部会指向asyncio的实现。
  • websockets.ServerConnection:最顶层的简化导入别名,同样是为兼容旧代码存在,最终会映射到当前运行时对应的ServerConnection实现。

能否混用?

三者的核心方法(recv()、send()等)完全一致,运行时混用不会出现逻辑问题。但建议优先使用websockets.asyncio.server.ServerConnection,这是当前版本的标准用法,能解决IDE的类型识别问题,也符合官方文档的最新规范。

IDE方法识别问题的解决

给websocket参数添加明确的类型注解即可让IDE正确识别方法:

import asyncio
from websockets.asyncio.server import serve, ServerConnection

async def hello(websocket: ServerConnection):
    name = await websocket.recv()
    print(f"<<< {name}")

    greeting = f"Hello {name}!"

    await websocket.send(greeting)
    print(f">>> {greeting}")

async def main():
    async with serve(hello, "localhost", 8765) as server:
        await server.serve_forever()

if __name__ == "__main__":
    asyncio.run(main())

内容的提问来源于stack exchange,提问作者Himanshu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 04:37:24