websocket-client

WebSocket client for Python with low level API options

Apache-2.0 88 个版本 Python >=3.9
liris <liris.pp@gmail.com>
安装
pip install websocket-client
poetry add websocket-client
pipenv install websocket-client
conda install websocket-client
描述

docs Build Status codecov PyPI Downloads PyPI version License

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 pip install websocket-client to install, or pip install -e . to install from a local copy of the code. This module is tested on Python 3.9+.

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: pip install websocket-client[optional]
  • To install websockets to run unit tests using the local echo server, use: pip install websocket-client[test]
  • To install Sphinx and sphinx_rtd_theme to build project documentation, use: pip install websocket-client[docs]

While not a strict dependency, rel is useful when using run_forever with automatic reconnect. Install rel with pip 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 argument (async dispatcher like rel or pyevent)
  • a non-zero reconnect argument (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()
版本列表
1.9.0 2025-10-07
1.8.0 2024-04-23
1.7.0 2023-12-03
1.6.4 2023-10-08
1.6.3 2023-09-11
1.6.2 2023-08-22
1.6.1 2023-06-23
1.6.0 2023-06-17
1.5.3 2023-06-09
1.5.2 2023-05-21
1.5.1 2023-02-04
1.5.0 2023-01-26
1.4.2 2022-11-04
1.4.1 2022-09-04
1.4.0 2022-08-24
1.3.3 2022-06-20
1.3.2 2022-03-29
1.3.1 2022-02-25
1.3.0 2022-02-25
1.2.3 2021-12-07
1.2.2 2021-12-07
1.2.1 2021-08-13
1.2.0 2021-08-11
1.1.1 2021-08-06
1.1.0 2021-06-10
1.0.1 2021-05-22
1.0.0 2021-05-18
0.59.0 2021-05-05
0.58.0 2021-03-03
0.57.0 2019-12-25
0.56.0 2019-03-21
0.55.0 2019-02-23
0.54.0 2018-11-01
0.53.0 2018-09-09
0.52.0 2018-09-03
0.51.0 2018-08-19
0.50.0 2018-08-18
0.49.0 2018-08-14
0.48.0 2018-05-27
0.47.0 2018-02-21
0.46.0 2017-12-30
0.45.0 2017-12-24
0.44.0 2017-06-23
0.43.0 2017-06-21
0.42.1 2017-06-18
0.42.0 2017-06-18
0.40.0 2016-12-09
0.39.0 2016-12-02
0.37.0 2016-04-14
0.36.0 2016-04-12
0.35.0 2016-01-04
0.34.0 2015-10-28
0.33.0 2015-10-27
0.32.0 2015-06-03
0.31.0 2015-05-22
0.30.0 2015-04-28
0.29.0 2015-04-01
0.28.0 2015-04-01
0.27.0 2015-03-31
0.26.0 2015-03-10
0.25.0 2015-02-23
0.24.0 2015-02-22
0.23.0 2014-12-11
0.22.0 2014-12-02
0.21.0 2014-10-16
0.20.0 2014-10-10
0.19.0 2014-10-09
0.18.0 2014-09-03
0.17.0 2014-08-22
0.16.0 2014-07-16
0.16.0a 2014-07-17
0.15.0 2014-05-27
0.14.1 2014-05-19
0.14.0 2014-05-15
0.13.0 2014-04-20
0.12.0 2013-09-13
0.11.0 2013-05-23
0.10.0 2013-03-22
0.9.0 2013-02-18
0.8.0 2012-09-14
0.7.0 2012-04-03
0.6.0 2012-03-02
0.5.1 2012-02-10
0.5.0 2012-01-18
0.5.0a 2012-01-19
0.4.1 2011-02-28
0.4 2011-01-06
0.3 2011-01-04