Skip to main content

WebSocket client for Python with low level API options

Project description

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.6+.

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

websocket-client-1.2.1.tar.gz (45.9 kB view details)

Uploaded Source

Built Distribution

websocket_client-1.2.1-py2.py3-none-any.whl (52.8 kB view details)

Uploaded Python 2 Python 3

File details

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

File metadata

  • Download URL: websocket-client-1.2.1.tar.gz
  • Upload date:
  • Size: 45.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.3 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.8.10

File hashes

Hashes for websocket-client-1.2.1.tar.gz
Algorithm Hash digest
SHA256 8dfb715d8a992f5712fff8c843adae94e22b22a99b2c5e6b0ec4a1a981cc4e0d
MD5 a043b9a04dc10a7c9f333cf55f6222df
BLAKE2b-256 4e8fb5c45af5a1def38b07c09a616be932ad49c35ebdc5e3cbf93966d7ed9750

See more details on using hashes here.

File details

Details for the file websocket_client-1.2.1-py2.py3-none-any.whl.

File metadata

  • Download URL: websocket_client-1.2.1-py2.py3-none-any.whl
  • Upload date:
  • Size: 52.8 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.3 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.8.10

File hashes

Hashes for websocket_client-1.2.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 0133d2f784858e59959ce82ddac316634229da55b498aac311f1620567a710ec
MD5 22afa8303bc3ed75f4fa70e405757173
BLAKE2b-256 5544030ea47390896c8d6dc9995c8e9a4c5df3a161cd45416d88119036c73eda

See more details on using hashes here.

Supported by

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