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/
=============
.. 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
Release history Release notifications | RSS feed
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.1.tar.gz
(52.4 kB
view details)
Built Distribution
File details
Details for the file wsrpc-aiohttp-0.2.1.tar.gz
.
File metadata
- Download URL: wsrpc-aiohttp-0.2.1.tar.gz
- Upload date:
- Size: 52.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 04e593bd011d802cc286b96b575c2091c293a11e152e4e756e521853387f75ea |
|
MD5 | c8d799cfe39566bec7197a318a82c834 |
|
BLAKE2b-256 | b2c8de4346e975b5286ea6e7055d15d26081402496dd73c10d9ab167ecefca7b |
File details
Details for the file wsrpc_aiohttp-0.2.1-py3-none-any.whl
.
File metadata
- Download URL: wsrpc_aiohttp-0.2.1-py3-none-any.whl
- Upload date:
- Size: 57.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 54b42d0adca3fef8dcbe724dab4a1747cd6cbfb1c8f1f3bb987418bf844318e1 |
|
MD5 | 5aa1ca398ab50c8237a3479a774a2ed2 |
|
BLAKE2b-256 | 6d82fca46577e41db058d774d746255862c6398dcc6f5bedc526a2cd2efc5d84 |