Skip to main content

docs Build Status codecov PyPI Downloads PyPI version

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 and wsaccel 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 and sphinx_rtd_theme to 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 dispatcher parameter, and provides a variety of event-based connection controls. run_forever does not automatically reconnect if the server closes the WebSocket. 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)  # 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()

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

websocket-client-1.4.1.tar.gz (50.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

websocket_client-1.4.1-py3-none-any.whl (55.0 kB view details)

Uploaded Python 3

File details

Details for the file websocket-client-1.4.1.tar.gz.

File metadata

  • Download URL: websocket-client-1.4.1.tar.gz
  • Upload date:
  • Size: 50.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.4

File hashes

Hashes for websocket-client-1.4.1.tar.gz
Algorithm Hash digest
SHA256 f9611eb65c8241a67fb373bef040b3cf8ad377a9f6546a12b620b6511e8ea9ef
MD5 1e8b6daae0cad86f8cd9210b24bdf95b
BLAKE2b-256 991101fe7ebcb7545a1990c53c11f31230afe1388b0b34256e3fd20e49482245

See more details on using hashes here.

File details

Details for the file websocket_client-1.4.1-py3-none-any.whl.

File metadata

File hashes

Hashes for websocket_client-1.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 398909eb7e261f44b8f4bd474785b6ec5f5b499d4953342fe9755e01ef624090
MD5 2a388086a7df184bb7d01217bd0e6c76
BLAKE2b-256 83b895c2512818d6ddb9b97f4163e915b2afe2db42b620270aa59c5ee0b47245

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.4.1

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page