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
File details
Details for the file websocket-client-1.2.3.tar.gz
.
File metadata
- Download URL: websocket-client-1.2.3.tar.gz
- Upload date:
- Size: 46.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1315816c0acc508997eb3ae03b9d3ff619c9d12d544c9a9b553704b1cc4f6af5 |
|
MD5 | 30fc2a3511e11114f11f4cee36a9d709 |
|
BLAKE2b-256 | b6fa72e77d094563208174abbbaa73c32f28c43a31193b843bddf233c7c87644 |
Provenance
File details
Details for the file websocket_client-1.2.3-py3-none-any.whl
.
File metadata
- Download URL: websocket_client-1.2.3-py3-none-any.whl
- Upload date:
- Size: 53.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2eed4cc58e4d65613ed6114af2f380f7910ff416fc8c46947f6e76b6815f56c0 |
|
MD5 | a54e66b1f9376059d21588f2b15efe54 |
|
BLAKE2b-256 | 8803cd5aa2c97356b7eee484a2b63fe850076ecb82fdeda82979a234b62a9a37 |