A Chat Server based on AMQP using RabbitMQ message broker implementing AMQP, websocket, sockjs, sockjs-tornado, tornado, and amqp python client library, Pika
Project description
rabbitChat
===========
A Chat-Server/Chat-System based on AMQP protocol(RabbitMQ Message Broker)
Documentation
--------------
**Link :** http://rabbitchat.readthedocs.io/en/latest/index.html
Details
--------
:Author: Anirban Roy Das
:Email: anirban.nick@gmail.com
:Copyright(C): 2016, Anirban Roy Das <anirban.nick@gmail.com>
Check ``rabbitChat/LICENSE`` file for full Copyright notice.
Overview
---------
rabbitChat is a very simple Chat Server which can be set up locally to chat in your LAN. It supports both **Public Chat** among all participants connected simultaneously at a particular time and also **Private Chat** betweent those individual participants.
It uses the `AMQP <https://www.amqp.org/>`_ protocol to implement the real time message passing system. **AMQP** is implemented in many languages and in many softwares, once of such is `RabbitMQ <https://www.rabbitmq.com/>`_ , which is a message broker implementing the `AMQP <https://www.amqp.org/>`_ protocol.
The connection is created using the `sockjs <https://github.com/sockjs/sockjs-client>`_ protocol. **SockJS** is implemented in many languages, primarily in Javascript to talk to the servers in real time, which tries to create a duplex bi-directional connection between the **Client(browser)** and the **Server**. Ther server should also implement the **sockjs** protocol. Thus using the `sockjs-tornado <https://github.com/MrJoes/sockjs-tornado>`_ library which exposes the **sockjs** protocol in `Tornado <http://www.tornadoweb.org/>`_ server.
It first tries to create a `Websocket <https://en.wikipedia.org/wiki/WebSocket>`_ connection, and if it fails then it fallbacks to other transport mechanisms, such as **Ajax**, **long polling**, etc. After the connection is established, the tornado server**(sockjs-tornado)** connects to **rabbitMQ** via AMQP protocol using the **AMQP Python Client Library**, `Pika <https://pypi.python.org/pypi/pika>`_.
Thus the connection is *web-browser* to *tornado* to *rabbitMQ* and vice versa.
Technical Specs
----------------
:sockjs-client: Advanced Websocket Javascript Client
:Tornado: Async Python Web Library + Web Server
:sockjs-tornado: SockJS websocket server implementation for Tornado
:AMQP: Advance Message Queuing Protocol used in Message Oriented Middleware
:pika: AMQP Python Client Library
:RabbitMQ: A Message Broker implementing AMQP
Features
---------
* Public chat
* Shows who joined and who left
* Shows number of people online
* Shows who is typing and who is not
* Join/Leave chat room features
Installation
------------
Prerequisites
~~~~~~~~~~~~~
1. python 2.7+
2. tornado
3. sockjs-tornado
4. sockjs-client
5. pika
6. rabbitMQ
Install
~~~~~~~
::
pip install tornado
**Step 3 - Install sockjs-tornado**
::
pip install pika
**Step 5 - Install RabbitMQ**
* *For* ``Mac`` *Users*
1. Brew Install RabbitMQ
::
echo "deb http://www.rabbitmq.com/debian/ testing main" >> /etc/apt/sources.list
2. Add the verification key for the package
::
apt-get update
4. And finally, download and install RabbitMQ
::
rabbitmq-server
# If you want to run in background
brew services rabbitmq start
2. *For* ``Ubuntu/LInux`` *Users*
::
# start normally
rabbitmq-server --detached
# To start using service
service rabbitmq-server stop
# To restart using service
service rabbitmq-server status
* **Start rabbitChat Server**
::
rabbitChat --port=9191
* **Stop rabbitChat Server**
Click ``Ctrl+C`` to stop the server.
Todo
-----
1. Add Private Chat functionality.
2. Manage Presence Management, sent, delivered acknowledgements.
3. Message Persistence and delivery of messages to offline clinets.
4. Add Blog post regarding this topic.
===========
A Chat-Server/Chat-System based on AMQP protocol(RabbitMQ Message Broker)
Documentation
--------------
**Link :** http://rabbitchat.readthedocs.io/en/latest/index.html
Details
--------
:Author: Anirban Roy Das
:Email: anirban.nick@gmail.com
:Copyright(C): 2016, Anirban Roy Das <anirban.nick@gmail.com>
Check ``rabbitChat/LICENSE`` file for full Copyright notice.
Overview
---------
rabbitChat is a very simple Chat Server which can be set up locally to chat in your LAN. It supports both **Public Chat** among all participants connected simultaneously at a particular time and also **Private Chat** betweent those individual participants.
It uses the `AMQP <https://www.amqp.org/>`_ protocol to implement the real time message passing system. **AMQP** is implemented in many languages and in many softwares, once of such is `RabbitMQ <https://www.rabbitmq.com/>`_ , which is a message broker implementing the `AMQP <https://www.amqp.org/>`_ protocol.
The connection is created using the `sockjs <https://github.com/sockjs/sockjs-client>`_ protocol. **SockJS** is implemented in many languages, primarily in Javascript to talk to the servers in real time, which tries to create a duplex bi-directional connection between the **Client(browser)** and the **Server**. Ther server should also implement the **sockjs** protocol. Thus using the `sockjs-tornado <https://github.com/MrJoes/sockjs-tornado>`_ library which exposes the **sockjs** protocol in `Tornado <http://www.tornadoweb.org/>`_ server.
It first tries to create a `Websocket <https://en.wikipedia.org/wiki/WebSocket>`_ connection, and if it fails then it fallbacks to other transport mechanisms, such as **Ajax**, **long polling**, etc. After the connection is established, the tornado server**(sockjs-tornado)** connects to **rabbitMQ** via AMQP protocol using the **AMQP Python Client Library**, `Pika <https://pypi.python.org/pypi/pika>`_.
Thus the connection is *web-browser* to *tornado* to *rabbitMQ* and vice versa.
Technical Specs
----------------
:sockjs-client: Advanced Websocket Javascript Client
:Tornado: Async Python Web Library + Web Server
:sockjs-tornado: SockJS websocket server implementation for Tornado
:AMQP: Advance Message Queuing Protocol used in Message Oriented Middleware
:pika: AMQP Python Client Library
:RabbitMQ: A Message Broker implementing AMQP
Features
---------
* Public chat
* Shows who joined and who left
* Shows number of people online
* Shows who is typing and who is not
* Join/Leave chat room features
Installation
------------
Prerequisites
~~~~~~~~~~~~~
1. python 2.7+
2. tornado
3. sockjs-tornado
4. sockjs-client
5. pika
6. rabbitMQ
Install
~~~~~~~
::
**Step 3 - Install sockjs-tornado**
::
**Step 5 - Install RabbitMQ**
* *For* ``Mac`` *Users*
1. Brew Install RabbitMQ
::
2. Add the verification key for the package
::
4. And finally, download and install RabbitMQ
::
# If you want to run in background
2. *For* ``Ubuntu/LInux`` *Users*
::
# start normally
# To start using service
# To restart using service
* **Start rabbitChat Server**
::
* **Stop rabbitChat Server**
Click ``Ctrl+C`` to stop the server.
Todo
-----
1. Add Private Chat functionality.
2. Manage Presence Management, sent, delivered acknowledgements.
3. Message Persistence and delivery of messages to offline clinets.
4. Add Blog post regarding this topic.