Skip to main content

WSRPC WebSocket RPC for tornado

Project description

Travis CI Latest Version

Remote Procedure call through WebSocket between browser and tornado.


  • Initiating call client function from server side.
  • Calling the server method from the client.
  • Transferring any exceptions from a client side to the server side and vise versa.
  • The frontend-library are well done for usage without any modification.
  • Fully asynchronous server-side functions.
  • Thread-based websocket handler for writing fully-synchronous code (for synchronous database drivers etc.)
  • Protected server-side methods (starts with underline never will be call from clients-side directly)
  • Asynchronous connection protocol. Server or client can call multiple methods with unpredictable ordering of answers.


Install via pip:

pip install wsrpc-tornado

Install ujson if you want:

pip install ujson

Simple usage

Add the backend side

from time import time
## If you want write async tornado code import it
# from from wsrpc import WebSocketRoute, WebSocket, wsrpc_static
## else you should use thread-base handler
from wsrpc import WebSocketRoute, WebSocketThreaded as WebSocket, wsrpc_static

    # js static files will available as "/js/wsrpc.min.js".
    # WebSocket handler. Client will connect here.
    (r"/ws/", WebSocket),
    # Serve other static files
    (r'/(.*)', tornado.web.StaticFileHandler, {
         'path': os.path.join(project_root, 'static'),
         'default_filename': 'index.html'

# This class should be call by client.
# Connection object will be have the instance of this class when will call route-alias.
class TestRoute(WebSocketRoute):
    # This method will be executed when client will call route-alias first time.
    def init(self, **kwargs):
        # the python __init__ must be return "self". This method might return anything.
        return kwargs

    def getEpoch(self):
        # this method named by camelCase because the client can call it.
        return time()

# stateful request
# this is the route alias TestRoute as "test1"
WebSocket.ROUTES['test1'] = TestRoute

# stateless request
WebSocket.ROUTES['test2'] = lambda *a, **kw: True

# initialize ThreadPool. Needed when using WebSocketThreaded.

Add the frontend side

<script type="text/javascript" src="/js/q.min.js"></script>
<script type="text/javascript" src="/js/wsrpc.min.js"></script>
    var url = window.location.protocol==="https:"?"wss://":"ws://" + + '/ws/';
    RPC = WSRPC(url, 5000);
    RPC.addRoute('test', function (data) { return "Test called"; });
    RPC.connect();'test1.getEpoch').then(function (data) {
    }, function (error) {
    }).done();'test2').then(function (data) { console.log(data); }).done();

Reverse call from Server to Client


def do_notify(self):
    awesome = 'Notification for you!'
    yield'notify', result=awesome)


    var url = (window.location.protocol==="https:"?"wss://":"ws://") + + '/ws/';
    RPC = WSRPC(url, 5000);
    RPC.addRoute('notify', function (data) { return data.result; });


Example running there demo.

Download files

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

Files for wsrpc-tornado, version 0.5.6
Filename, size File type Python version Upload date Hashes
Filename, size wsrpc-tornado-0.5.6.tar.gz (31.9 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page