WebSocket client for Python with low level API options
Project description
websocket-client
websocket-client is a WebSocket client for Python. It provides access to low level APIs for WebSockets. websocket-client implements version hybi-13 of the WebSocket protocol. This client does not currently support the permessage-deflate extension from RFC 7692.
Documentation
This project's documentation can be found at https://websocket-client.readthedocs.io/
Contributing
Please see the contribution guidelines
Installation
You can use either python3 setup.py install
or pip3 install websocket-client
to install. This module is tested on Python 3.6+.
There are several optional dependencies that can be installed to enable specific websocket-client features.
- To install
python-socks
for proxy usage andwsaccel
for a minor performance boost, use:pip3 install websocket-client[optional]
- To install
websockets
to run unit tests using the local echo server, use:pip3 install websocket-client[test]
- To install
Sphinx
andsphinx_rtd_theme
to build project documentation, use:pip3 install websocket-client[docs]
Footnote: Some shells, such as zsh, require you to escape the [
and ]
characters with a \
.
Usage Tips
Check out the documentation's FAQ for additional guidelines: https://websocket-client.readthedocs.io/en/latest/faq.html
Known issues with this library include lack of WebSocket Compression support (RFC 7692) and minimal threading documentation/support.
Performance
The send
and validate_utf8
methods can sometimes be bottleneck.
You can disable UTF8 validation in this library (and receive a
performance enhancement) with the skip_utf8_validation
parameter.
If you want to get better performance, install wsaccel. While
websocket-client does not depend on wsaccel, it will be used if
available. wsaccel doubles the speed of UTF8 validation and
offers a very minor 10% performance boost when masking the
payload data as part of the send
process. Numpy used to
be a suggested performance enhancement alternative, but
issue #687
found it didn't help.
Examples
Many more examples are found in the examples documentation.
Long-lived Connection
Most real-world WebSockets situations involve longer-lived connections.
The WebSocketApp run_forever
loop automatically tries to reconnect when a
connection is lost, and provides a variety of event-based connection controls.
import websocket
import _thread
import time
def on_message(ws, message):
print(message)
def on_error(ws, error):
print(error)
def on_close(ws, close_status_code, close_msg):
print("### closed ###")
def on_open(ws):
def run(*args):
for i in range(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_open=on_open,
on_message=on_message,
on_error=on_error,
on_close=on_close)
ws.run_forever()
Short-lived Connection
This is if you want to communicate a short message and disconnect immediately when done. For example, if you want to confirm that a WebSocket server is running and responds properly to a specific request.
from websocket import create_connection
ws = 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()
If you want to customize socket options, set sockopt, as seen below:
from websocket import create_connection
ws = create_connection("ws://echo.websocket.org/",
sockopt=((socket.IPPROTO_TCP, socket.TCP_NODELAY),))
Acknowledgements
Thanks to @battlemidget and @ralphbean for helping migrate this project to Python 3.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for websocket_client-1.2.3-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2eed4cc58e4d65613ed6114af2f380f7910ff416fc8c46947f6e76b6815f56c0 |
|
MD5 | a54e66b1f9376059d21588f2b15efe54 |
|
BLAKE2b-256 | 8803cd5aa2c97356b7eee484a2b63fe850076ecb82fdeda82979a234b62a9a37 |