Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

A Web chat implemented with RabbitMQ and Websockets

branch: master
README.md

RabbitMQ Chat

This project shows how to create a simple web chat room with RabbitMQ.

The chat server uses Websockets to send messages to the connected users. This means it only works with Chrome and Safari. Some browsers like Firefox 4 can be configured to enable Websockets.

On the RabbitMQ side there it uses a custom exchange to store the last 20 messages, so new users connecting to the chat room can get a context of what's going on. See the project Recent History Exchange for installation instructions.

This will be used as an example for the book RabbitMQ in Action.

Requirements

The Recent History Exchange has to be installed prior to running this application.

How does it work

Each user that connects to the server will get a private auto delete anonymous queue. This queue will be managed by an AMQP consumer. Whenever the AMQP consumer recieves a message it will forward it to the Websockets process and this one will send it to the user browser.

When the user is disconnects from the server his consumer gets closed and the queue deleted.

Building:

Get the source code:

$ git clone git://github.com/videlalvaro/rabbitmq-chat.git
$ cd rabbitmq-chat

Compile the source code:

$ make

Usage

Running in development mode

Edit the file ./priv/chat_dev.config to suit your RabbitMQ configuraion.

Start the server:

$ ./start-dev.sh

Point your browser to http://localhost:8080/. Invite your friends. Enjoy!

Running in production mode

Create a file called ./priv/chat.config with the proper values to suit your RabbitMQ configuraion.

See the file ./priv/chat_dev.config for an example of the configuraion format.

Start the server:

$ ./start.sh

Credits

Inspired by YakRiak

Original design adapted from YakRiak. Thanks Basho and the crew, specially @pharkmillups for being an awesome community manager.

License

See LICENSE.md

Something went wrong with that request. Please try again.