7.0:
websockets sends Ping frames at regular intervals and closes the connection if it doesn't receive a matching Pong frame. See :class:~protocol.WebSocketCommonProtocol for details.
Added process_request and select_subprotocol arguments to :func:~server.serve() and :class:~server.WebSocketServerProtocol to customize :meth:~server.WebSocketServerProtocol.process_request and :meth:~server.WebSocketServerProtocol.select_subprotocol without subclassing :class:~server.WebSocketServerProtocol
Added support for sending fragmented messages.
Added the :meth:~protocol.WebSocketCommonProtocol.wait_closed method to protocols.
Added an interactive client: python -m websockets <uri>.
Changed the origins argument to represent the lack of an origin with None rather than ''.
Fixed a data loss bug in :meth:~protocol.WebSocketCommonProtocol.recv: canceling it at the wrong time could result in messages being dropped.
Improved handling of multiple HTTP headers with the same name.
Improved error messages when a required HTTP header is missing.
6.0:
Warning
Version 6.0 introduces the :class:~http.Headers class for managing HTTP headers and changes several public APIs:
:meth:~server.WebSocketServerProtocol.process_request now receives a :class:~http.Headers instead of a :class:~http.client.HTTPMessage in the request_headers argument.
The :attr:~protocol.WebSocketCommonProtocol.request_headers and :attr:~protocol.WebSocketCommonProtocol.response_headers attributes of :class:~protocol.WebSocketCommonProtocol are :class:~http.Headers instead of :class:~http.client.HTTPMessage.
The :attr:~protocol.WebSocketCommonProtocol.raw_request_headers and :attr:~protocol.WebSocketCommonProtocol.raw_response_headers attributes of :class:~protocol.WebSocketCommonProtocol are removed. Use :meth:~http.Headers.raw_items instead.
Functions defined in the :mod:~handshake module now receive :class:~http.Headers in argument instead of get_header or set_header functions. This affects libraries that rely on low-level APIs.
Functions defined in the :mod:~http module now return HTTP headers as :class:~http.Headers instead of lists of (name, value) pairs.
Note that :class:~http.Headers and :class:~http.client.HTTPMessage provide similar APIs.
Also:
Added compatibility with Python 3.7.
5.0.1
Version 5.0 fixes a security issue introduced in version 4.0.
websockets 4.0 was vulnerable to denial of service by memory exhaustion because it didn't enforce max_size when decompressing compressed messages.
Also:
:func:~client.connect() performs HTTP Basic Auth when the URI contains credentials.
Iterating on incoming messages no longer raises an exception when the connection terminates with code 1001 (going away).
A plain HTTP request now receives a 426 Upgrade Required response and doesn't log a stack trace.
:func:~server.unix_serve can be used as an asynchronous context manager on Python ≥ 3.5.1.
Added :meth:~protocol.WebSocketCommonProtocol.closed property.
If a :meth:~protocol.WebSocketCommonProtocol.ping doesn't receive a pong, it's cancelled when the connection is closed.
Reported the cause of :exc:~exceptions.ConnectionClosed exceptions.
Added new examples in the documentation.
Updated documentation with new features from Python 3.6.
Improved several other sections of the documentation.
Fixed missing close code, which caused :exc:TypeError on connection close.
Fixed a race condition in the closing handshake that raised :exc:~exceptions.InvalidState.
Stopped logging stack traces when the TCP connection dies prematurely.
Prevented writing to a closing TCP connection during unclean shutdowns.
Made connection termination more robust to network congestion.
Prevented processing of incoming frames after failing the connection.
4.0:
Warning: Version 4.0 enables compression with the permessage-deflate extension.
In August 2017, Firefox and Chrome support it, but not Safari and IE.
Compression should improve performance but it increases RAM and CPU use.
If you want to disable compression, add compression=None when calling :func:`~server.serve()` or :func:`~client.connect()`.
Warning: Version 4.0 removes the ``state_name`` attribute of protocols.
Use protocol.state.name instead of protocol.state_name.
Also:
:class:`~protocol.WebSocketCommonProtocol` instances can be used as asynchronous iterators on Python ≥ 3.6. They yield incoming messages.
Added :func:`~websockets.server.unix_serve` for listening on Unix sockets.
Added the :attr:`~websockets.server.WebSocketServer.sockets` attribute.
Reorganized and extended documentation.
Aborted connections if they don't close within the configured timeout.
Rewrote connection termination to increase robustness in edge cases.
Stopped leaking pending tasks when :meth:`~asyncio.Task.cancel` is called on a connection while it's being closed.
Reduced verbosity of "Failing the WebSocket connection" logs.
Allowed extra_headers to override Server and User-Agent headers.
Renamed :func:`~websockets.server.serve()` and :func:`~websockets.client.connect()`'s klass argument to create_protocol to reflect that it can also be a callable. For backwards compatibility, klass is still supported.
:func:`~websockets.server.serve` can be used as an asynchronous context manager on Python ≥ 3.5.
Added support for customizing handling of incoming connections with :meth:`~websockets.server.WebSocketServerProtocol.process_request()`.
Made read and write buffer sizes configurable.
Rewrote HTTP handling for simplicity and performance.
Added an optional C extension to speed up low level operations.
An invalid response status code during :func:`~websockets.client.connect` now raises :class:`~websockets.exceptions.InvalidStatusCode` with a code attribute.
Python. It implements RFC 6455 with a focus on correctness and simplicity.
It passes the Autobahn Testsuite.
Built on top of Python's asynchronous I/O support introduced in PEP 3156,
it provides an API based on coroutines, making it easy to write highly
concurrent applications.