Skip to main content

A simple WebSocket server

Project description

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

Project details


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

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

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.

Supported by

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