用于python的websocket客户端。支持Hybi13。

websocket_client的Python项目详细描述


websocket客户端模块是用于python的websocket客户端。这为websocket提供了低级api。所有的api都是同步函数。

websocket客户端只支持hybi-13。

许可证

  • BSD

安装

此模块在Python2.7和Python3.4+上进行了测试。

键入“python setup.py install”或“pip install websocket client”进行安装。

小心!

从v0.16.0开始,我们可以通过python 3的“pip install websocket client”进行安装。

此模块取决于

  • six
  • backports.ssl_match_hostname for Python 2.x

性能

“send”和“validate_utf8”方法在纯python上速度太慢。如果你想获得更好的性能,请同时安装numpy和wsaccel。

python 3怎么样

现在,我们在0.14.0版的单个源代码上支持Python3。谢谢,@battlemidget和@ralphbean。

http代理

支持通过http代理访问websocket。 代理服务器必须允许“连接”方法到WebSocket端口。 默认squid设置为“只允许连接https端口”。

websocket客户端的当前实现是通过代理使用“connect”方法。

示例

importwebsocketws=websocket.WebSocket()ws.connect("ws://example.com/websocket",http_proxy_host="proxy_host_name",http_proxy_port=3128)

示例

长寿命连接

这个例子类似于使用javascript的浏览器中websocket代码的外观。

importwebsockettry:importthreadexceptImportError:import_threadasthreadimporttimedefon_message(ws,message):print(message)defon_error(ws,error):print(error)defon_close(ws):print("### closed ###")defon_open(ws):defrun(*args):foriinrange(3):time.sleep(1)ws.send("Hello %d"%i)time.sleep(1)ws.close()print("thread terminating...")thread.start_new_thread(run,())if__name__=="__main__":websocket.enableTrace(True)ws=websocket.WebSocketApp("ws://echo.websocket.org/",on_message=on_message,on_error=on_error,on_close=on_close)ws.on_open=on_openws.run_forever()

短命一次性发送接收

这是如果你想传达一个短消息,并断开立即完成。

fromwebsocketimportcreate_connectionws=create_connection("ws://echo.websocket.org/")print("Sending 'Hello, World'...")ws.send("Hello, World")print("Sent")print("Receiving...")result=ws.recv()print("Received '%s'"%result)ws.close()

如果要自定义套接字选项,请设置sockopt。

sockopt示例

fromwebsocketimportcreate_connectionws=create_connection("ws://echo.websocket.org/",sockopt=((socket.IPPROTO_TCP,socket.TCP_NODELAY),))

更高级:自定义类

如果您想自己处理细节问题,也可以为连接编写自己的类。

importsocketfromwebsocketimportcreate_connection,WebSocketclassMyWebSocket(WebSocket):defrecv_frame(self):frame=super().recv_frame()print('yay! I got this frame: ',frame)returnframews=create_connection("ws://echo.websocket.org/",sockopt=((socket.IPPROTO_TCP,socket.TCP_NODELAY,1),),class_=MyWebSocket)

常见问题解答

如何禁用ssl证书验证?

请将sslopt设置为{“cert_reqs”:ssl.cert_none}。

WebSocketApp示例

ws=websocket.WebSocketApp("wss://echo.websocket.org")ws.run_forever(sslopt={"cert_reqs":ssl.CERT_NONE})

创建连接示例

ws=websocket.create_connection("wss://echo.websocket.org",sslopt={"cert_reqs":ssl.CERT_NONE})

WebSocket示例

ws=websocket.WebSocket(sslopt={"cert_reqs":ssl.CERT_NONE})ws.connect("wss://echo.websocket.org")

如何禁用主机名验证?

请将sslopt设置为{“check\u hostname”:false}。 (从v0.18.0开始)

WebSocketApp示例

ws=websocket.WebSocketApp("wss://echo.websocket.org")ws.run_forever(sslopt={"check_hostname":False})

创建连接示例

ws=websocket.create_connection("wss://echo.websocket.org",sslopt={"check_hostname":False})

WebSocket示例

ws=websocket.WebSocket(sslopt={"check_hostname":False})ws.connect("wss://echo.websocket.org")

如何启用SNI

sni支持可用于python 2.7.9+和3.2+。它将尽可能自动启用。

子协议。

服务器需要支持子协议,请这样设置子协议。

子目录示例

ws=websocket.create_connection("ws://example.com/websocket",subprotocols=["binary","base64"])

wsdump.py

py是一个简单的websocket测试(调试)工具。

echo.websocket.org示例:

$ wsdump.py ws://echo.websocket.org/
Press Ctrl+C to quit
> Hello, WebSocket
< Hello, WebSocket
> How are you?
< How are you?

使用量

用法:

wsdump.py [-h] [-v [VERBOSE]] ws_url

WebSocket简单转储工具

位置参数:
网址websocket url。例如ws://echo.websocket.org/
可选参数:
-h, --helpshow this help message and exit
websocketapp
-v VERBOSE, --verbose VERBOSE
set verbose mode. If set to 1, show opcode. If set to 2, enable to trace websocket module

示例:

$ wsdump.py ws://echo.websocket.org/
$ wsdump.py ws://echo.websocket.org/ -v
$ wsdump.py ws://echo.websocket.org/ -vv

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

推荐PyPI第三方库


热门话题
java提高机器学习Rest服务性能   java反转字符的字符串顺序,并使用构造函数将其放入LinkedList   继承为什么Java不支持在方法签名中添加“throws”?   执行DDL alter table if exists任务时发生java错误。城市   java在eclipse中使用CREATETXT并打包在jar中   java AES256与3DES 256密钥检测   具有两个相同类型字段的java JPA实体   java Webapp日志记录设置被忽略   java KeyEventDispatcher可以在一个应用程序中工作,但不能在另一个应用程序中工作   带有Swing和OpenJDK的java PinchZoom   未涉及java AspectJ注释切入点(对于任何注释类型)   java如何在FuseBAI中获取日志文件详细信息   java在Linux上将wstring转换为jstring