Skip to main content

A simple WebSocket server

GitHub Actions PyPI PyPI - Python Version PyPI - License

Based on simple-websocket-server.

  • RFC 6455 (All latest browsers)
  • TLS/SSL out of the box
  • Passes Autobahns Websocket Testsuite
  • Support for Python 2 and 3

Installation

pip install simple-websocket-server

Echo Server Example

from simple_websocket_server import WebSocketServer, WebSocket


class SimpleEcho(WebSocket):
    def handle(self):
        # echo message back to client
        self.send_message(self.data)

    def connected(self):
        print(self.address, 'connected')

    def handle_close(self):
        print(self.address, 'closed')


server = WebSocketServer('', 8000, SimpleEcho)
server.serve_forever()

Open tests/websocket.html and connect to the server.

Chat Server Example

from simple_websocket_server import WebSocketServer, WebSocket


class SimpleChat(WebSocket):
    def handle(self):
        for client in clients:
            if client != self:
                client.send_message(self.address[0] + u' - ' + self.data)

    def connected(self):
        print(self.address, 'connected')
        for client in clients:
            client.send_message(self.address[0] + u' - connected')
        clients.append(self)

    def handle_close(self):
        clients.remove(self)
        print(self.address, 'closed')
        for client in clients:
            client.send_message(self.address[0] + u' - disconnected')


clients = []

server = WebSocketServer('', 8000, SimpleChat)
server.serve_forever()

Open multiple tests/websocket.html and connect to the server.

Want to get up and running faster?

There is an example which provides a simple echo and chat server

Echo Server

python tests/example_server.py --example echo

Chat Server (open up multiple tests/websocket.html files)

python tests/example_server.py --example chat

TLS/SSL Example

  1. Generate a certificate with key

     openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout key.pem
    
  2. Run the secure TLS/SSL server (in this case the cert.pem file is in the same directory)

     python tests/example_server.py --example chat --ssl 1
    
  3. Offer the certificate to the browser by serving tests/websocket.html through https. The HTTPS server will look for cert.pem in the local directory. Ensure the tests/websocket.html is also in the same directory to where the server is run.

     python tests/simple_https_server.py
    
  4. Open a web browser to: https://localhost:443/tests/websocket.html

  5. Change ws://localhost:8000/ to wss://localhost:8000 and click connect.

Note: if you are having problems connecting, ensure that the certificate is added in your browser against the exception https://localhost:8000 or whatever host:port pair you want to connect to.

For the Programmers

connected: called when handshake is complete

  • self.address: TCP address port tuple of the endpoint

handle_close: called when the endpoint is closed or there is an error

  • self.address: TCP address port tuple of the endpoint

handle: gets called when there is an incoming message from the client endpoint

  • self.address: TCP address port tuple of the endpoint
  • self.opcode: the WebSocket frame type (STREAM, TEXT, BINARY)
  • self.data: bytearray (BINARY frame) or unicode string payload (TEXT frame)
  • self.request: HTTP details from the WebSocket handshake (refer to BaseHTTPRequestHandler)

send_message: send some text or binary data to the client endpoint

  • sending data as a unicode object will send a TEXT frame
  • sending data as a bytearray object will send a BINARY frame

close: send close frame to endpoint

Licensing

MIT

Download files

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

Source Distribution

simple-websocket-server-0.4.4.tar.gz (10.0 kB view details)

Uploaded Source

Built Distribution

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

simple_websocket_server-0.4.4-py3-none-any.whl (8.9 kB view details)

Uploaded Python 3

File details

Details for the file simple-websocket-server-0.4.4.tar.gz.

File metadata

  • Download URL: simple-websocket-server-0.4.4.tar.gz
  • Upload date:
  • Size: 10.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.4

File hashes

Hashes for simple-websocket-server-0.4.4.tar.gz
Algorithm Hash digest
SHA256 d083aaa69eefcb6fc87c009d720c0c7d6fe8d95135dc18f855a5688576c33ae6
MD5 24077e55c4b458ec294b627123c962f0
BLAKE2b-256 eb6ba46e3783168e5e11ec18e88d7650cb242e5a22b8228e9ad8b2375c68afe8

See more details on using hashes here.

File details

Details for the file simple_websocket_server-0.4.4-py3-none-any.whl.

File metadata

File hashes

Hashes for simple_websocket_server-0.4.4-py3-none-any.whl
Algorithm Hash digest
SHA256 2d0892a473fe0479f80aed63505d27088a463a420aa085d8c7025e863d0ee3b7
MD5 25ce298f44f11a5c96acf02fcd7298a1
BLAKE2b-256 68a38ee8c7e6426825476f196fc09bb2d1cac4eafdddd3782ce27768d82c7b1d

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.4.4 This release

2 files

0.4.2

2 files

0.4.1

1 file

0.4.0

1 file

0.3.1

1 file

0.3.0

1 file

0.1.1

1 file

Supported by

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