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.8+.
There are several optional dependencies that can be installed to enable specific websocket-client features.
- To install
python-socksfor proxy usage andwsaccelfor a minor performance boost, use:pip3 install websocket-client[optional] - To install
websocketsto run unit tests using the local echo server, use:pip3 install websocket-client[test] - To install
Sphinxandsphinx_rtd_themeto build project documentation, use:pip3 install websocket-client[docs]
While not a strict dependency, rel
is useful when using run_forever with automatic reconnect. Install rel with pip3 install rel.
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 will automatically try to reconnect
to an open WebSocket connection when a network
connection is lost if it is provided with:
- a
dispatcherargument (async dispatcher like rel or pyevent) - a non-zero
reconnectargument (delay between disconnection and attempted reconnection)
run_forever provides a variety of event-based connection controls
using callbacks like on_message and on_error.
run_forever does not automatically reconnect if the server
closes the WebSocket gracefully (returning
a standard websocket close code).
This is the logic behind the decision.
Customizing behavior when the server closes
the WebSocket should be handled in the on_close callback.
This example uses rel
for the dispatcher to provide automatic reconnection.
import websocket
import _thread
import time
import rel
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):
print("Opened connection")
if __name__ == "__main__":
websocket.enableTrace(True)
ws = websocket.WebSocketApp("wss://api.gemini.com/v1/marketdata/BTCUSD",
on_open=on_open,
on_message=on_message,
on_error=on_error,
on_close=on_close)
ws.run_forever(dispatcher=rel, reconnect=5) # Set dispatcher to automatic reconnection, 5 second reconnect delay if connection closed unexpectedly
rel.signal(2, rel.abort) # Keyboard Interrupt
rel.dispatch()
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.events/")
print(ws.recv())
print("Sending 'Hello, World'...")
ws.send("Hello, World")
print("Sent")
print("Receiving...")
result = ws.recv()
print("Received '%s'" % result)
ws.close()
Metadata
Release files for websocket-client 1.6.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| websocket-client-1.6.3.tar.gz | 51.9 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| websocket_client-1.6.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 109.2 kB
Release files / websocket-client-1.6.3.tar.gz
| Download URL | websocket-client-1.6.3.tar.gz |
|---|---|
| Size | 51.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3aad25d31284266bcfcfd1fd8a743f63282305a364b8d0948a43bd606acc652f
|
|
BLAKE2b-256 checksum How to use checksums |
4434551f30cbdc0515c39c2e78ef5919615785cd370844e40ada82367c1fab3f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.10.12
|
Release files / websocket_client-1.6.3-py3-none-any.whl
| Download URL | websocket_client-1.6.3-py3-none-any.whl |
|---|---|
| Size | 57.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6cfc30d051ebabb73a5fa246efdcc14c8fbebbd0330f8984ac3bb6d9edd2ad03
|
|
BLAKE2b-256 checksum How to use checksums |
0b5049e0d7342e5d441d43b525d6c84656ea40aea3e58d530004d07b22bc9b04
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.10.12
|
Security for websocket-client 1.6.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.