Home

Awesome

Jegarn

A high performance chat system, based on swoole, redis and msgpack. Integrated authorization, chat, groupchat, chatroom and offline storage.

And client-sdk for iOS, Android, JS, and PHP are provided.

Website: https://jegarn.com

@Deprecated

This project has been moved to https://github.com/jegarn.

Support SDKs and Demos

We also build some applications for showing that how to use those SDKs.

<a href="https://raw.githubusercontent.com/yaoguais/yaoguais.github.io/master/images/jegarn_preview.gif"><img src="https://raw.githubusercontent.com/yaoguais/yaoguais.github.io/master/images/jegarn_preview.gif" width="200"></a>

Visit the WebApp Demo, and download the Source Code.

Download Android APP, and download the Source Code.

Download the iOS Project, and run it by Simulator or your iPhone.

Demos Functions:

  1. register and multi accounts login
  2. add friends and chat with friends
  3. create chat group and chat with every member
  4. create chat room and chat with every online people
  5. a always online robot "Counter" for sending a number to everybody

Requirements

And for demo chat system "minions", it requires:

Installation

wget http://pecl.php.net/get/swoole-1.7.20.tgz
tar -zvxf swoole-1.7.20.tgz 
cd swoole-1.7.20
phpize
./configure --enable-openssl
make && make install
echo "extension=swoole.so" > /etc/php.d/swoole.ini

pecl install msgpack
yum -y install redis

for more details, see INSTALL.md.

Tutorial

Start Server

start a tcp server

$ php server.php 192.168.1.2 9501

start another tcp server

$ php server.php 192.168.1.2 9502

start a websocket server

$ php webserver.php 192.168.1.2 9503

all server use same cache can communicate with each other, and they form a cluster.

Start Client

$ php robot_counter.php

Configuration

// cache server to storage users and messages
'cache'       => [
    'host'     => '192.168.1.2',
    'port'     => 6379,
    'timeout'  => 0.0,
    'password' => null
],
// server config, same as configuration of swoole
'server'      => [
    'host'          => '192.168.199.243',
    'port'          => 9501,
    'worker_num'    => 4,
    'dispatch_mode' => 2,
    'log_file'      => __DIR__ . '/../logs/server_swoole.log',
    'daemonize'     => 1,
    'ssl_cert_file' => __DIR__ . '/ssl.crt',
    'ssl_key_file' => __DIR__ . '/ssl.key'
],
// listeners, you can choose your own packet listeners
'listener' => [
    'jegarn\listener\AuthPacketListener', // always add to first, not authorized user would do nothing
    'jegarn\listener\NotificationPacketListener',
    'jegarn\listener\ChatPacketListener',
    'jegarn\listener\GroupChatPacketListener',
    'jegarn\listener\ChatroomPacketListener'
]

Contribution

Thank you very much because of your contribution, and I believe we can make jegarn better. Some ways available:

License

Apache License Version 2.0