Skip to main content

Communicate with websocket through redis as messaging broker

Project description

Websocket_redis
=============
``websocket_redis`` is an asynchronous python module gather two projects `websockets <https://github.com/aaugustin/websockets>`_ and `aioredis <https://github.com/aio-libs/aioredis>`_ to make the communication between the client and backend as easy as possible without losing any message has been sent from the client.

=============
Installation
=============

Install from Pypi:
________________________

.. code-block:: bash

$ pip install websocket_redis

Manually installation:
________________________

.. code-block:: bash

# we assume you already created the python virtualenv
# get the latst version from master branch
$ wget -O websocket_redis.zip https://github.com/Abdeljelil/websocket_redis/archive/master.zip
$ unzip websocket_redis.zip
$ cd websocket_redis-master
$ make install
# run tests (optional)
$ pip install nose
$ make test

`pypi <https://pypi.python.org/pypi/websocket_redis>`_.

Usage examples
--------------

Override WSHandler Methodes:

.. code:: python

import asyncio
from websocket_redis.server.ws_server import WSServer
from websocket_redis.server.ws_handler import WSHandler


class MyWSHandler(WSHandler):

@asyncio.coroutine
def on_close(self, code):

print("Session {} has closed, client : {}".format(
self.session_id, self.client))

@asyncio.coroutine
def on_error(self, e):

print("Exception {} has raised, client : {}".format(
e, self.client))

@asyncio.coroutine
def on_message(self, text):

print("Message \'{}\' has received from client : {}".format(
text, self.client))

@asyncio.coroutine
def on_send(self, text):

print("Message \'{}\' will be sent to {}".format(
text, self.client))

Start Websocker server:

.. code:: python

ws_connection = dict(
host="127.0.0.1",
port=5678)

redis_connection = dict(
address=("localhost", 6379)
)

loop = asyncio.get_event_loop()
server = WSServer(
ws_connection=ws_connection,
redis_connection=redis_connection,
app_name="test_app",
ws_handler_class=MyWSHandler
)

try:
loop.run_until_complete(server.run())
loop.run_forever()
except KeyboardInterrupt:
server.close()
loop.close()

Async API:

.. code:: python

import asyncio

from websocket_redis.api.async import APIClientListener


class MyAPIClientListener(APIClientListener):

@asyncio.coroutine
def on_message(self, message):

print("new message {}".format(message.text))
yield from message.reply("Hi!")

redis_connection = dict(
address=("localhost", 6379)
)
handler = MyAPIClientListener(redis_connection, app_name="test_app")
loop = asyncio.get_event_loop()

loop.run_until_complete(handler.run())

Threaded API:

.. code:: python

from websocket_redis.api.threading import APIClientListener


class MyAPIClientListener(APIClientListener):

def on_message(self, message):

print("new message {}".format(message.text))
message.reply("Hi!")

redis_connection = dict(
host="localhost",
port=6379
)
handler = MyAPIClientListener(redis_connection, app_name="test_app")

handler.run()

.. |build| image:: https://travis-ci.org/Abdeljelil/websocket_redis.svg?branch=master
:target: https://travis-ci.org/Abdeljelil/websocket_redis
:alt: Travis-ci build
.. |cversion| image:: https://img.shields.io/pypi/v/websocket_redis.svg
:target: https://pypi.python.org/pypi/websocket_redis
:alt: Python versions supported
.. |versions| image:: https://img.shields.io/pypi/pyversions/websocket_redis.svg
:target: https://pypi.python.org/pypi/websocket_redis
:alt: Python versions supported
.. |codecov| image:: https://codecov.io/github/Abdeljelil/websocket_redis/websocket_redis.svg?branch=master
:target: http://codecov.io/github/Abdeljelil/websocket_redis?branch=master
:alt: Coverage!
.. |status| image:: https://img.shields.io/pypi/status/websocket_redis.svg
:target: https://pypi.python.org/pypi/websocket_redis
:alt: Package stability

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

websocket_redis-0.1.2.tar.gz (9.2 kB view hashes)

Uploaded Source

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