A high performance chat system, based on swoole, redis and msgpack. Integrated authorization, chat, groupchat, chatroom and offline storage.
Website: https://jegarn.com
WebApp Demo: https://jegarn.com/minions.html
This demo is referenced by webQQ, and supports
- register and mulit accounts login
- add friends and chat with freinds
- create chat group and chat with every member
- create chat room and chat with every online people
- a always online robot "Counter" for sending a number to everybody
Android Demo https://jegarn.com/minions.apk
android application supports:
- login the chat-system
- list your friends and chat with them
- list your groups and send messages
- list your chat rooms and send messages
- persist all the messages of chat
- notify then message come
- PHP 5.3.10 or later
- Swoole 1.7.20 or newer
- Msgpack 0.5.7
- Redis 2.8.22
And for demo chat system "minions", it requires:
- yaf 2.3.5
- mysql 5.6.26
- nginx 1.8.0
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.
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.
$ php robot_counter.php
// 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'
]
Thank you very much because of your contribution, and I believe we can make jegarn better. Some ways available:
- contribute your code via Pull Request
- write down your Issues
- make the Wiki complete
Apache License Version 2.0