Skip to main content

WSRPC is the RPC over WebSocket for aiohttp

Project description

WSRPC aiohttp
=============

.. image:: https://travis-ci.org/wsrpc/wsrpc-aiohttp.svg
:target: https://travis-ci.org/wsrpc/wsrpc-aiohttp
:alt: Travis CI

.. image:: https://img.shields.io/pypi/v/wsrpc-aiohttp.svg
:target: https://pypi-hypernode.com/pypi/wsrpc-aiohttp/
:alt: Latest Version

.. image:: https://img.shields.io/pypi/wheel/wsrpc-aiohttp.svg
:target: https://pypi-hypernode.com/pypi/wsrpc-aiohttp/

.. image:: https://img.shields.io/pypi/pyversions/wsrpc-aiohttp.svg
:target: https://pypi-hypernode.com/pypi/wsrpc-aiohttp/

.. image:: https://img.shields.io/pypi/l/wsrpc-aiohttp.svg
:target: https://pypi-hypernode.com/pypi/wsrpc-aiohttp/

Remote Procedure call through WebSocket between browser and tornado.

Features
++++++++

* 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.
* If `ujson`_ is installed messages will be serialize/deserialize with it.


Installation
------------

Install via pip::

pip install wsrpc-aiohttp


Install ujson if you want::

pip install ujson



Simple usage
------------

Add the backend side


.. code-block:: python

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

tornado.web.Application((
# js static files will available as "/js/wsrpc.min.js".
wsrpc_static(r'/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.
WebSocket.init_pool()



Add the frontend side


.. code-block:: HTML

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

RPC.call('test1.getEpoch').then(function (data) {
console.log(data);
}, function (error) {
alert(error);
}).done();

RPC.call('test2').then(function (data) { console.log(data); }).done();
</script>

Reverse call from Server to Client
----------------------------------
backend:

.. code-block:: python

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

frontend:

.. code-block:: HTML

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

Documentation
+++++++++++++

All available `documentation here`_.


.. _documentation here: https://docs.wsrpc.info/


Example
+++++++

Example running there demo_.


.. _demo: https://demo.wsrpc.info/

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

wsrpc-aiohttp-0.2.4.tar.gz (52.4 kB view details)

Uploaded Source

Built Distribution

wsrpc_aiohttp-0.2.4-py3-none-any.whl (57.4 kB view details)

Uploaded Python 3

File details

Details for the file wsrpc-aiohttp-0.2.4.tar.gz.

File metadata

File hashes

Hashes for wsrpc-aiohttp-0.2.4.tar.gz
Algorithm Hash digest
SHA256 2cb5c82d8c4a3f9e5c9640fc4581777d2955d76d7e575132bdaa00466d77cb66
MD5 e5c592f9d8d8d288a4978d8ddfa642c3
BLAKE2b-256 176c11e4fa6f8d70b03a1315cc2f262ac16c16c5648228ac8699daa708c8b024

See more details on using hashes here.

File details

Details for the file wsrpc_aiohttp-0.2.4-py3-none-any.whl.

File metadata

File hashes

Hashes for wsrpc_aiohttp-0.2.4-py3-none-any.whl
Algorithm Hash digest
SHA256 ae36dce69d5c58bf726618e6e515ed2caeecf9eb37a7b6f22e4edad44313e4ac
MD5 81cdecc2f60bbda13f52c524a9ff04d7
BLAKE2b-256 97b996a2840927ff79c2d6f039a21f98b70199f2eff42c802f7b6ea3c4adfb19

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