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.7+.
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 will automatically try to reconnect when a
connection is lost if it is provided with a dispatcher parameter,
and provides a variety of event-based connection controls.
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) # Set dispatcher to automatic reconnection
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()
If you want to customize socket options, set sockopt, as seen below:
from websocket import create_connection
ws = create_connection("ws://echo.websocket.events/",
sockopt=((socket.IPPROTO_TCP, socket.TCP_NODELAY),))
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.3.3-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5d55652dc1d0b3c734f044337d929aaf83f4f9138816ec680c1aefefb4dc4877 |
|
MD5 | 39c13cbfc8dfe9183a2dc14da847091a |
|
BLAKE2b-256 | 67b491683d7d5f66393e8877492fe4763304f82dbe308658a8db98f7a9e20baf |