# A simple WebSocket server
[![GitHub Actions](https://github.com/pikhovkin/simple-websocket-server/workflows/build/badge.svg)](https://github.com/pikhovkin/simple-websocket-server/actions)
[![PyPI](https://img.shields.io/pypi/v/simple-websocket-server.svg)](https://pypi.org/project/simple-websocket-server/)
![PyPI - Python Version](https://img.shields.io/pypi/pyversions/simple-websocket-server.svg)
[![PyPI - License](https://img.shields.io/pypi/l/simple-websocket-server.svg)](./LICENSE)
Based on [simple-websocket-server](https://github.com/dpallot/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
`````python
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
`````python
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
Raw data
{
"_id": null,
"home_page": "https://github.com/pikhovkin/simple-websocket-server",
"name": "simple-websocket-server",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "websocket-server,websocket,websockets,websocket-protocol,websocket-library",
"author": "Sergei Pikhovkin",
"author_email": "s@pikhovkin.ru",
"download_url": "https://files.pythonhosted.org/packages/eb/6b/a46e3783168e5e11ec18e88d7650cb242e5a22b8228e9ad8b2375c68afe8/simple-websocket-server-0.4.4.tar.gz",
"platform": null,
"description": "# A simple WebSocket server\n\n[![GitHub Actions](https://github.com/pikhovkin/simple-websocket-server/workflows/build/badge.svg)](https://github.com/pikhovkin/simple-websocket-server/actions)\n[![PyPI](https://img.shields.io/pypi/v/simple-websocket-server.svg)](https://pypi.org/project/simple-websocket-server/)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/simple-websocket-server.svg)\n[![PyPI - License](https://img.shields.io/pypi/l/simple-websocket-server.svg)](./LICENSE)\n\nBased on [simple-websocket-server](https://github.com/dpallot/simple-websocket-server).\n\n- RFC 6455 (All latest browsers)\n- TLS/SSL out of the box\n- Passes Autobahns Websocket Testsuite\n- Support for Python 2 and 3\n\n#### Installation\n\n pip install simple-websocket-server\n\n#### Echo Server Example\n\n`````python\nfrom simple_websocket_server import WebSocketServer, WebSocket\n\n\nclass SimpleEcho(WebSocket):\n def handle(self):\n # echo message back to client\n self.send_message(self.data)\n\n def connected(self):\n print(self.address, 'connected')\n\n def handle_close(self):\n print(self.address, 'closed')\n\n\nserver = WebSocketServer('', 8000, SimpleEcho)\nserver.serve_forever()\n`````\n\nOpen *tests/websocket.html* and connect to the server.\n\n#### Chat Server Example\n\n`````python\nfrom simple_websocket_server import WebSocketServer, WebSocket\n\n\nclass SimpleChat(WebSocket):\n def handle(self):\n for client in clients:\n if client != self:\n client.send_message(self.address[0] + u' - ' + self.data)\n\n def connected(self):\n print(self.address, 'connected')\n for client in clients:\n client.send_message(self.address[0] + u' - connected')\n clients.append(self)\n\n def handle_close(self):\n clients.remove(self)\n print(self.address, 'closed')\n for client in clients:\n client.send_message(self.address[0] + u' - disconnected')\n\n\nclients = []\n\nserver = WebSocketServer('', 8000, SimpleChat)\nserver.serve_forever()\n`````\nOpen multiple *tests/websocket.html* and connect to the server.\n\n#### Want to get up and running faster?\n\nThere is an example which provides a simple echo and chat server\n\nEcho Server\n\n python tests/example_server.py --example echo\n\nChat Server (open up multiple *tests/websocket.html* files)\n\n python tests/example_server.py --example chat\n\n#### TLS/SSL Example\n\n1) Generate a certificate with key\n\n openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout key.pem\n\n2) Run the secure TLS/SSL server (in this case the cert.pem file is in the same directory)\n\n python tests/example_server.py --example chat --ssl 1\n\n3) Offer the certificate to the browser by serving *tests/websocket.html* through https.\nThe HTTPS server will look for cert.pem in the local directory.\nEnsure the *tests/websocket.html* is also in the same directory to where the server is run.\n\n python tests/simple_https_server.py\n\n4) Open a web browser to: *https://localhost:443/tests/websocket.html*\n\n5) Change *ws://localhost:8000/* to *wss://localhost:8000* and click connect.\n\nNote: 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.\n\n#### For the Programmers\n\nconnected: called when handshake is complete\n - self.address: TCP address port tuple of the endpoint\n\nhandle_close: called when the endpoint is closed or there is an error\n - self.address: TCP address port tuple of the endpoint\n\nhandle: gets called when there is an incoming message from the client endpoint\n - self.address: TCP address port tuple of the endpoint\n - self.opcode: the WebSocket frame type (STREAM, TEXT, BINARY)\n - self.data: bytearray (BINARY frame) or unicode string payload (TEXT frame)\n - self.request: HTTP details from the WebSocket handshake (refer to BaseHTTPRequestHandler)\n\nsend_message: send some text or binary data to the client endpoint\n - sending data as a unicode object will send a TEXT frame\n - sending data as a bytearray object will send a BINARY frame\n\nclose: send close frame to endpoint\n\n### Licensing\n\nMIT\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A simple WebSocket server",
"version": "0.4.4",
"project_urls": {
"Homepage": "https://github.com/pikhovkin/simple-websocket-server"
},
"split_keywords": [
"websocket-server",
"websocket",
"websockets",
"websocket-protocol",
"websocket-library"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "68a38ee8c7e6426825476f196fc09bb2d1cac4eafdddd3782ce27768d82c7b1d",
"md5": "25ce298f44f11a5c96acf02fcd7298a1",
"sha256": "2d0892a473fe0479f80aed63505d27088a463a420aa085d8c7025e863d0ee3b7"
},
"downloads": -1,
"filename": "simple_websocket_server-0.4.4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "25ce298f44f11a5c96acf02fcd7298a1",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 8930,
"upload_time": "2023-08-05T14:09:43",
"upload_time_iso_8601": "2023-08-05T14:09:43.891595Z",
"url": "https://files.pythonhosted.org/packages/68/a3/8ee8c7e6426825476f196fc09bb2d1cac4eafdddd3782ce27768d82c7b1d/simple_websocket_server-0.4.4-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "eb6ba46e3783168e5e11ec18e88d7650cb242e5a22b8228e9ad8b2375c68afe8",
"md5": "24077e55c4b458ec294b627123c962f0",
"sha256": "d083aaa69eefcb6fc87c009d720c0c7d6fe8d95135dc18f855a5688576c33ae6"
},
"downloads": -1,
"filename": "simple-websocket-server-0.4.4.tar.gz",
"has_sig": false,
"md5_digest": "24077e55c4b458ec294b627123c962f0",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 9971,
"upload_time": "2023-08-05T14:09:45",
"upload_time_iso_8601": "2023-08-05T14:09:45.572990Z",
"url": "https://files.pythonhosted.org/packages/eb/6b/a46e3783168e5e11ec18e88d7650cb242e5a22b8228e9ad8b2375c68afe8/simple-websocket-server-0.4.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-08-05 14:09:45",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "pikhovkin",
"github_project": "simple-websocket-server",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"tox": true,
"lcname": "simple-websocket-server"
}