gevent-websocket is a websocket library for the gevent networking library written written and maintained by Jeffrey Gelens It is licensed under the BSD license.
from geventwebsocket.server import WebSocketServer, WebSocketApplication class EchoApplication(WebSocketServer): def on_message(self, message): self.ws.send(message) WebSocketServer( ('', 8000), Resource({'/': EchoApplication}) )
Install Python 2.5 or newer and Gevent and its dependencies. The latest release can be download from PyPi or by cloning the repository and running:
$ python setup.py install
The easiest way to install gevent-websocket is directly from PyPi using pip or setuptools by running the commands below:
$ pip install gevent-websocket
or:
$ easy_install gevent-websocket
This also installs the dependencies automatically.
At the moment gevent-websocket has one handler based on the Pywsgi gevent Hook up the WebSocketHandler to the Pywsgi Server by setting the handler_class when creating the server instance.
from gevent import pywsgi from geventwebsocket.handler import WebSocketHandler server = pywsgi.WSGIServer(("", 8000), websocket_app, handler_class=WebSocketHandler) server.serve_forever()
The handler enhances your WSGI app with a Websocket environment variable when the browser requests a Websocket connection.
def websocket_app(environ, start_response): if environ["PATH_INFO"] == '/echo': ws = environ["wsgi.websocket"] message = ws.receive() ws.send(message)
Using Gunicorn it is even more easy to start a server. Only the websocket_app from the previous example is required to start the server. Start Gunicorn using the following command and worker class to enable Websocket funtionality for the application.
gunicorn -k "geventwebsocket.gunicorn.workers.GeventWebSocketWorker" wsgi:websocket_app