Skip to content

karellen/karellen-geventws

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Karellen Gevent Websocket Library

This project is now suspended as the Jeffrey Gelens resumed maintenance of gevent-websocket.

Gitter chat

This is a Karellen fork of gevent-websocket. The goal of this fork is to maintain the project to support Python 3.3, 3.4 and 3.5+ as well as latest WS standards errata.

karellen-geventws is a WebSocket library for the gevent networking library.

Features include:

  • Integration on both socket level or using an abstract interface.
  • RPC and PubSub framework using WAMP (WebSocket Application Messaging Protocol).
  • Easily extendible using a simple WebSocket protocol plugin API
    from geventwebsocket import WebSocketServer, WebSocketApplication, Resource

    class EchoApplication(WebSocketApplication):
        def on_open(self):
            print("Connection opened")

        def on_message(self, message):
            self.ws.send(message)

        def on_close(self, reason):
            print(reason)

    WebSocketServer(
        ('', 8000),
        Resource({'/': EchoApplication})
    ).serve_forever()

or a low level implementation:

    from gevent import pywsgi
    from geventwebsocket.handler import WebSocketHandler

    def websocket_app(environ, start_response):
        if environ["PATH_INFO"] == '/echo':
            ws = environ["wsgi.websocket"]
            message = ws.receive()
            ws.send(message)

    server = pywsgi.WSGIServer(("", 8000), websocket_app,
        handler_class=WebSocketHandler)
    server.serve_forever()

More examples can be found in the src/unittest/python directory. Hopefully more documentation will be available soon.

Installation

The easiest way to install karellen-geventws is directly from PyPi using pip or setuptools by running the commands below:

$ pip install karellen-geventws

Gunicorn Worker

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

Performance

karellen-geventws is pretty fast, but can be accelerated further by installing wsaccel and ujson or simplejson:

$ pip install wsaccel ujson

karellen-geventws automatically detects wsaccel and uses the Cython implementation for UTF8 validation and later also frame masking and demasking.

Get in touch

The fork parent is located at gevent-websocket.

Issues can be created on GitHub.