Picows - 异步WebSocket客户端与服务器的高性能实现

打印 上一主题 下一主题

主题 1885|帖子 1885|积分 5655

Picows - 异步WebSocket客户端与服务器的高性能实现

    picows Ultra-fast websocket client and server for asyncio  
项目地点: https://gitcode.com/gh_mirrors/pi/picows   
1. 项目介绍

Picows是一个基于Python的异步WebSocket客户端和服务器库,使用Cython实现,以提供杰出的速率和效率。它通过优化的WebSocket帧解析器和构建器,实现了比其他流行的Python WebSocket库更快的性能。Picows适用于须要高性能WebSocket通信的应用场景。
2. 项目快速启动

安装

首先,确保你的环境中安装了Python 3.8或更高版本。然后使用pip安装Picows:
  1. pip install picows
复制代码
Echo客户端示例

以下是一个简朴的Echo客户端示例,它毗连到Echo服务器,发送一条消息,并在吸收到复兴后断开毗连。
  1. import asyncio
  2. from picows import ws_connect, WSFrame, WSTransport, WSListener, WSMsgType, WSCloseCode
  3. class ClientListener(WSListener):
  4.     def on_ws_connected(self, transport: WSTransport):
  5.         transport.send(WSMsgType.TEXT, b"Hello world")
  6.     def on_ws_frame(self, transport: WSTransport, frame: WSFrame):
  7.         print(f"Echo reply: {frame.get_payload_as_ascii_text()}")
  8.         transport.send_close(WSCloseCode.OK)
  9.         transport.disconnect()
  10. async def main(url):
  11.     transport, client = await ws_connect(ClientListener, url)
  12.     await transport.wait_disconnected()
  13. if __name__ == '__main__':
  14.     asyncio.run(main("ws://127.0.0.1:9001"))
复制代码
Echo服务器示例

以下是一个简朴的Echo服务器示例,它吸收客户端的消息并发送回同样的消息。
  1. import asyncio
  2. from picows import ws_create_server, WSFrame, WSTransport, WSListener, WSMsgType, WSUpgradeRequest
  3. class ServerClientListener(WSListener):
  4.     def on_ws_connected(self, transport: WSTransport):
  5.         print("New client connected")
  6.     def on_ws_frame(self, transport: WSTransport, frame: WSFrame):
  7.         if frame.msg_type == WSMsgType.CLOSE:
  8.             transport.send_close(frame.get_close_code(), frame.get_close_message())
  9.             transport.disconnect()
  10.         else:
  11.             transport.send(frame.msg_type, frame.get_payload_as_bytes())
  12. async def main():
  13.     def listener_factory(r: WSUpgradeRequest):
  14.         # 这里可以实现对请求内容的路由
  15.         return ServerClientListener()
  16.     server: asyncio.Server = await ws_create_server(listener_factory, "127.0.0.1", 9001)
  17.     for s in server.sockets:
  18.         print(f"Server started on {s.getsockname()}")
  19.     await server.serve_forever()
  20. if __name__ == '__main__':
  21.     asyncio.run(main())
复制代码
3. 应用案例和最佳实践



  • 性能调优:使用Picows提供的Cython .pxd文件,可以高效地集成用户本身的Cython代码,以进一步进步性能。
  • 内存管理:Picows在内部尽可能地重用内存,避免不须要的Python对象创建,从而减少内存分配和垃圾回收的开销。
  • 自定义Ping/Pong:Picows支持主动的Ping/Pong消息,用户可以自定义Ping消息的内容,以及处理Pong消息的逻辑。
4. 典型生态项目

Picows作为一个高性能的WebSocket库,可以与其他开源项目结合使用,例如:


  • 异步Web框架:如Sanic或FastAPI,用于构建异步的WebSocket服务端应用。
  • 分布式体系:如Celery,用于在分布式任务队列中实现WebSocket通信。
  • 数据库驱动:如异步的数据库驱动,用于实现数据库操纵与WebSocket通信的结合。
以上是基于Picows开源项目的简介和快速启动指南,希望对开辟者有所帮助。
    picows Ultra-fast websocket client and server for asyncio  
项目地点: https://gitcode.com/gh_mirrors/pi/picows   

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

兜兜零元

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表