An implementation of the WebSocket Protocol (RFC 6455 & 7692)
Project description
What is websockets?
websockets is a library for building WebSocket servers and clients in Python with a focus on correctness and simplicity.
Built on top of asyncio, Python’s standard asynchronous I/O framework, it provides an elegant coroutine-based API.
Documentation is available on Read the Docs.
Here’s how a client sends and receives messages:
#!/usr/bin/env python
import asyncio
import websockets
async def hello(uri):
async with websockets.connect(uri) as websocket:
await websocket.send("Hello world!")
await websocket.recv()
asyncio.get_event_loop().run_until_complete(
hello('ws://localhost:8765'))
And here’s an echo server:
#!/usr/bin/env python
import asyncio
import websockets
async def echo(websocket, path):
async for message in websocket:
await websocket.send(message)
asyncio.get_event_loop().run_until_complete(
websockets.serve(echo, 'localhost', 8765))
asyncio.get_event_loop().run_forever()
Does that look good?
Why should I use websockets?
The development of websockets is shaped by four principles:
Simplicity: all you need to understand is msg = await ws.recv() and await ws.send(msg); websockets takes care of managing connections so you can focus on your application.
Robustness: websockets is built for production; for example it was the only library to handle backpressure correctly before the issue became widely known in the Python community.
Quality: websockets is heavily tested. Continuous integration fails under 100% branch coverage. Also it passes the industry-standard Autobahn Testsuite.
Performance: memory use is configurable. An extension written in C accelerates expensive operations. It’s pre-compiled for Linux, macOS and Windows and packaged in the wheel format for each system and Python version.
Documentation is a first class concern in the project. Head over to Read the Docs and see for yourself.
Why shouldn’t I use websockets?
If you prefer callbacks over coroutines: websockets was created to provide the best coroutine-based API to manage WebSocket connections in Python. Pick another library for a callback-based API.
If you’re looking for a mixed HTTP / WebSocket library: websockets aims at being an excellent implementation of RFC 6455: The WebSocket Protocol and RFC 7692: Compression Extensions for WebSocket. Its support for HTTP is minimal — just enough for a HTTP health check.
If you want to use Python 2: websockets builds upon asyncio which only works on Python 3. websockets requires Python ≥ 3.6.1.
What else?
Bug reports, patches and suggestions are welcome!
To report a security vulnerability, please use the Tidelift security contact. Tidelift will coordinate the fix and disclosure.
For anything else, please open an issue or send a pull request.
Participants must uphold the Contributor Covenant code of conduct.
websockets is released under the BSD license.
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 Distributions
Hashes for websockets-9.0.2-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fe4a0ee6f7385d5863d1e9e33ac0cfaa9ad38e21c6ccbce1895490c3be6a8e54 |
|
MD5 | aab00c401c93b30f3b7995b4f4ec0070 |
|
BLAKE2b-256 | 8055410704f279ce28770e245f041a9b93a2ac8060b00bf3190a3da19679cd0b |
Hashes for websockets-9.0.2-cp39-cp39-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 07bf4e7b8ed81f14c726f59cf05469049a624765d1833af31be7bfaf8168bfa2 |
|
MD5 | fe87567744af7c75d7f6df46546e2bd4 |
|
BLAKE2b-256 | 6ab92d84b37c7d695e5855ae832322784ae6533a6a99e30402983da357e81b90 |
Hashes for websockets-9.0.2-cp39-cp39-manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e9918588676ba6d20bdc13d0156b0f70d60772a9000666b44d11c5e18c289c0c |
|
MD5 | 1e39bd8377e69986534d15000b8907f5 |
|
BLAKE2b-256 | 4446bd5f81a2ecd72f3cef18454ed659ed48ef9215c8e582a533b257cab2e947 |
Hashes for websockets-9.0.2-cp39-cp39-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b3850516029cc77c1911c62e5ccde3438a223d99b505b37abcac43f9a944c42f |
|
MD5 | 4208373096e6a7359b2ed4a9ec1a01df |
|
BLAKE2b-256 | 15791f2bbada4c4b2ed8d65cc164d709f9bc775f338449c572390b054a7d95dc |
Hashes for websockets-9.0.2-cp39-cp39-manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ee4eb10f4dc7b08ee0a69f00fcb109ac73f1b8719abf09e93121fb3c95aecc78 |
|
MD5 | 948aa8f1c7bae4f3df81b297102e2aa3 |
|
BLAKE2b-256 | d68723e4971ef8a0c5767d4fbe4a675d35d95f14427ae1c8e7be14fd5027f69b |
Hashes for websockets-9.0.2-cp39-cp39-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 26d74a477a97731708a23f4cd818a29beb8f8fdde2aa7e1504954c5ed7bca59d |
|
MD5 | fd81aede4e08169a5c6a2c8c93b918fd |
|
BLAKE2b-256 | 3b6d9322d34c7e9c7bb2f9bf26b1d811ea66f695231994617219ef3b51ba1ead |
Hashes for websockets-9.0.2-cp39-cp39-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 039ca218df60228f70ae57c0236e4c001643555e08c16dbd2affb740098aa409 |
|
MD5 | 074885f6360a7063f1469f659942bf28 |
|
BLAKE2b-256 | 3ecc22c4a9b7dae3e9fdbd84c2c302fe7b157d71ef1cdbf5c95438308d489cb4 |
Hashes for websockets-9.0.2-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b755e640c3644f6bf9ebfc67220f56b40af6f0b750c88cdea872667aab0b29bd |
|
MD5 | 34f35669662a23244d357cb573f016f7 |
|
BLAKE2b-256 | 075da93cb3cdef76984a99f7c51fe8913ff3cd3015d19526838bd399a71de2d4 |
Hashes for websockets-9.0.2-cp38-cp38-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b002d1a8974b734c6c1779439e6c4669ac786f9cd978faab9f9ca32a59256537 |
|
MD5 | 59e3aed8b4e1ed65db4a666b6db0f6b6 |
|
BLAKE2b-256 | 1f6a1ee83c164f423b4f758f004ed8a5e634dc5f6a95ae19ad48020e28132fcd |
Hashes for websockets-9.0.2-cp38-cp38-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0fba718694519ad310d6de90a416c592c9d9c7231e4a8d43d9e8f6ca73d6ef84 |
|
MD5 | 4e9891a7e0883d11c5b6fb8a32e8f73f |
|
BLAKE2b-256 | a21fb942f11ad2c123329690777756d525d79a506cf04b1ad845543895b68d24 |
Hashes for websockets-9.0.2-cp38-cp38-manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 947c5c8624a45d7f25d90c07906459af51b711906e52e932aee368299561100c |
|
MD5 | ed56dcaced6c2cb89b20746b84c35154 |
|
BLAKE2b-256 | 5d4b4386891c32ee0efc58a1a89f6768ad8f4fd1af1c2740e1cd02238279d16b |
Hashes for websockets-9.0.2-cp38-cp38-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | eece76f3aa1f710b53a8dda7dece157b2cf9b4b975db989aece5417441ffc94f |
|
MD5 | 0b7c3bd2850eb35d7f3cbadd1b1844aa |
|
BLAKE2b-256 | 15bd77a0d42a71f2661896c512a4f9d13e54d9ee79f2f9f600a1c68f5aae856f |
Hashes for websockets-9.0.2-cp38-cp38-manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0675814e16a13e842d9c609a5fd584e54a38519658af6424080090379d0727c9 |
|
MD5 | f11996d1a2f303f81f0fe696977660af |
|
BLAKE2b-256 | b9466249b45bea97f55abed4fa59d962991d297f9e7dddcea169eb80564bf54a |
Hashes for websockets-9.0.2-cp38-cp38-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7f69f950a801ed9df301c8f85873f35805df3a06b2ffe481961cb16edd94cc61 |
|
MD5 | 253da66c06baa1f4373e94f65f30bfb3 |
|
BLAKE2b-256 | d3095e76859ae67c9722e864ef46ff29df3efbd2ae9fe7674f845e2519291a1c |
Hashes for websockets-9.0.2-cp38-cp38-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bd707e4aa2535f9ee67288139e75d246872b9c33a2f10ce96287b98e15794d7b |
|
MD5 | d0e8b0cc2b5f97b86c19dbec89305e6c |
|
BLAKE2b-256 | 7e8f6562ba5f740fe453b59d0f0469d822dbb0e42df0ac4e3d4a2cd546fcea95 |
Hashes for websockets-9.0.2-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 120d411b4b553ee1b6f25b2bed5401564ad957c5faa0d77f581357e835cb1e27 |
|
MD5 | 39ac6f9832d7c4d83ef68c17f237ae57 |
|
BLAKE2b-256 | 61746eff31331c6e8f050c7da07c41cb59c1432fefbdc7634ff146c83defbfe8 |
Hashes for websockets-9.0.2-cp37-cp37m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2aa2a305d4baf8aef2ba57366633e55fca1653a6d038660c4512ea6e45c9d038 |
|
MD5 | 99a39079bc41f66586a8538d86d40b79 |
|
BLAKE2b-256 | c968ba661c2106059aaa671bb043cae655ff2bbc09ae27735750812ef3a13ec8 |
Hashes for websockets-9.0.2-cp37-cp37m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | db95eff41bfed6904a42760723a4194bba808f99f72bbfaab8a8820d34ea346d |
|
MD5 | 4d707480cf375a34a5c418f3983d7f92 |
|
BLAKE2b-256 | 36fc7b30c51407dfcf8074d3ce0e60b7f3564ba757c2d74de6f9b93dacb81d25 |
Hashes for websockets-9.0.2-cp37-cp37m-manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 70c317ba8fe19aa6e8eed7329a19acd8f720b7a36413cf80b6b5cc1231cd0fde |
|
MD5 | c846b1d14821aee5d06e122afcfa761c |
|
BLAKE2b-256 | 93100f5a0e9e6b4977b5d2d83eae4bc49cb0a647be54e8dbf09bb7c418163a00 |
Hashes for websockets-9.0.2-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 27dc3e2dae2e8761c2001e1477973c1cef48d4a8ff08955cda91223066dfdeef |
|
MD5 | 3931e97ce2c4ecdbbbd8c5c12bf75c7b |
|
BLAKE2b-256 | a622805106bab15ba6a98613c96068a65850b7df79ffce440159adf56e9f1009 |
Hashes for websockets-9.0.2-cp37-cp37m-manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7d046f13854fb7a617d638ee4ab32583fd770e76d05cfe77b74b4ccad187c2ec |
|
MD5 | a9ceed660dc221d96c3d570d2f686ad5 |
|
BLAKE2b-256 | c0e6a141b134df0ff1424b35195f259378e8eda82dad17f9ac71a6c075ce2145 |
Hashes for websockets-9.0.2-cp37-cp37m-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 243aab42649b1e3f58e1219be6c6adb996450d00809cdffdffd13021cf2b596a |
|
MD5 | 4b3530d392cee1febf04259a071ef834 |
|
BLAKE2b-256 | ee7c0f7d98a6f4b7c7cbbcf1ed4d4fe1a3cf8f36283e359d95b0fa1101a7d9f4 |
Hashes for websockets-9.0.2-cp37-cp37m-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 075bffd2a26ad54f78ffaf36918219b24c7e59d2ead336dc402489c2ba05293f |
|
MD5 | a7af1282e4a807613ec774332f34ebb3 |
|
BLAKE2b-256 | 4d61184259f06d31173905572f7c2e1e5013e4c296664ca97202936527537a5e |
Hashes for websockets-9.0.2-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 73b6e6081617b8b46f50ad0179a975df94989371731e59f7b570efc3b6749415 |
|
MD5 | 373b7c4ac6d24fbc9a24ce62838b0708 |
|
BLAKE2b-256 | fa3b4ef68fcb3c2e919cf0a7ee601894c5c50021f75dc2302cdd0a936b083543 |
Hashes for websockets-9.0.2-cp36-cp36m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f474351c3f6aecc49d90a8ed06eb291aa0a762b64472b0ab79a4a3061e9b2118 |
|
MD5 | 2fc61ad2d5417469d2599e063a55b0d2 |
|
BLAKE2b-256 | 44c400d198f46a80e44223742ded68483092af6c0dd3c62d4504d23b7542a863 |
Hashes for websockets-9.0.2-cp36-cp36m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 87f6704568a55add8fc67a6de46d71edb6aad515be6333ae9da048c53c7ecc3e |
|
MD5 | f592f408c7e51996365891cf87f78368 |
|
BLAKE2b-256 | 51fdadcace61c5f454d7aaf951839c662bf3a26b5869a25a2ac2b8159c089afc |
Hashes for websockets-9.0.2-cp36-cp36m-manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e7856452e03fef6f9d32c75f74b427925537ec013db2aeb0e8a13bf6b5ec1c65 |
|
MD5 | aa7c709dd2e20612b30dacb886ca00b5 |
|
BLAKE2b-256 | e3aa33167f0f06c7f48c2371812aada53476b79d4cec12464521f9382a547e40 |
Hashes for websockets-9.0.2-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b3165c728cd17a70f0143a3e402a7e25f647ba7a7d38c4c6fa586c458bf67d27 |
|
MD5 | 3a5de25e76bcb4ba15cd55b689151bef |
|
BLAKE2b-256 | 3304f8fe82409f1b7c0e675c810d47564e9e121b6b398f4c8891c68eef1a1d88 |
Hashes for websockets-9.0.2-cp36-cp36m-manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6de6c68d6a2dff2a10eaa96339eeab857e55de987ea93f199774e11a8a262661 |
|
MD5 | da0939f1cf9c4bdca75c2ddb7dcb6a3f |
|
BLAKE2b-256 | c935836559dc5fad167b0efc59b86692a67c6707bb292c8ad73082be6f2a5165 |
Hashes for websockets-9.0.2-cp36-cp36m-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | aff8094a36fa3bb80de9ef9f33c42cb7f5615d90f696ce33aba4974090aac5a6 |
|
MD5 | 84666604ddf23ba675661ba16fb57e1f |
|
BLAKE2b-256 | 7678d957ebf9ca1c9142c436c812b9ab9146446c6e82c927006d144cd0f9d93e |
Hashes for websockets-9.0.2-cp36-cp36m-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 041643544bd0c703ac67d4fc9db3108ba9edb4655000b122a1aaf5fe8d5d94b7 |
|
MD5 | 3a8197f9fb3ddf3322986325e51c60d7 |
|
BLAKE2b-256 | 048cac506c37ad43d8061c499366b1ce0eeece0739071f05e99b41afdc1da8e3 |
Hashes for websockets-9.0.2-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e2ea2463b55781ebdcfd853644b94ebed7adb2c0b55dee25ef4809660d64508e |
|
MD5 | 8439f660486d8d8da1866c6526b21e45 |
|
BLAKE2b-256 | e5f4a3ba5ee6f641341defec43284d0d06e181c97e271c5dbc73e0b6cc0ae5dd |