使用asyncio在python中实现简单的websocket

simple_ws的Python项目详细描述


用python实现简单的websocket

PyPI versionPython version

安装

$ pip install simple_ws

用法

要测试库,克隆repo,请打开两个命令窗口并将cd放入 python ws目录

  • 运行python -m http.server 8000
  • 在另一个窗口中运行python ws_example.py
  • 在浏览器中打开http://localhost:8000

示例

fromsimple_wsimportWebSocketclassWSHandler(WebSocket):defon_message(self,msg,target_client):forclientinself.clients:ifclient.is_open():client.write_message(msg)defon_open(self,client):print("Client connected!")defon_close(self,client):print("Client left...")defon_ping(self,client):print("Recieved ping!")defon_pong(self,client):print("Recieved pong!")host=''port=8080ws=WSHandler(host,port)

WebSocket参数

parametertypedefaultdescriptio n
^{tt3}$StringHost domain
^{tt4}$IntegerPort number for websocket
^{tt5}$BooleanTrueWhether server should ping client in a given intervall, will close connection if pong is not received
^{tt6}$Integer5How often should server ping client in seconds, has no effect if ping is set to false
^{tt7}$BooleanTrueWhether messages should be compressed
^{tt8}$Integer8192Max size for a single websocket frame. If payload exceeds limit, the message will be split in several parts
^{tt9}$Integer4096Max network buffer size

功能

websocket

打开(自我,客户端)

当服务器打开到新客户端(客户端)的连接时调用。

defon_open(self,client):# Executes when opening a connection

打开关闭(自我,客户端)

当服务器关闭到客户端(客户端)的连接时调用。

defon_close(self,client):# Executes when closing a connection

打开消息(self、msg、client)

当服务器从客户端收到消息(msg)时调用 (客户)。消息可以是二进制或文本格式。

defon_message(self,msg,client):# Executes when server recieves a messages from client

打开(自我,客户端)

当服务器向客户端(客户端)发送ping时调用。

defon_ping(self,client):# Executes when ping is sent to a client

打开(自我,客户端)

当服务器从客户端(客户端)接收到pong时调用。

defon_pong(self,client):# Executes when pong is received from a client

客户

写入消息(self,msg,binary=false)

向客户端发送消息负载(msg)。如果binary=true,则消息 作为二进制数据发送。

# Text messageclient.write_message("Hello world")# Binary messageclient.write_message(b"0x00",binary=True)

是否打开(自行)

如果连接已通过握手,则返回true,并且是 当前打开。

关闭(自我、状态、原因)

向客户端发送关闭帧,并在之后关闭连接 要么是回应,要么是在1秒后。状态和原因不是 目前已实施。最终将导致websocket.on_close 被解雇了。

client.close(1002,"Pong not recieved")

待办事项

  1. 编写更多测试
  2. 在乒乓球帧中添加对有效载荷的支持
  3. 错误处理
  4. 清理课堂
  5. 执行关闭状态和原因
  6. 实现所有压缩配置
  7. 添加更多可配置性/删除硬编码常量
  8. 机具连接限制

许可证

MIT License

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Javaservlet,使用Quartz发送邮件   用Java编写XYRectangle类   java Docker/AWS ECS容器支持的服务(端点)数量   音频Java读取WAV文件作为浮点数组   java为什么是日历。九月不起作用了?   java连接到HTTPS url并发布到它   java线程动画示例不起作用   java查找HashMap是否包含所选值和返回键   java与后端API的交互   JavaFX启动时在JavaFX中执行应用程序启动异常   每T秒从Java运行一次MATLAB   java@Array(长度=?)怎么样OpenHFT中的注释/使用的值   java无法从InputStream读取多个可外部化的对象   java My RestController不返回对象的所有属性   java使Android XML阅读器只读取XML文件的一部分   java注释会影响编译时吗?   从Java到C#的迭代器方法与接口的等效性,然后在类上实现?   swing为什么Java中的侦听器相互依赖?