Terry-Mao/gopush-cluster
是一个支持集群的comet服务(支持websocket,和tcp协议)。
特性
- 轻量级
- 高性能
- 纯Golang实现
- 支持消息过期
- 支持离线消息存储
- 支持单个以及多个私信推送
- 支持单个Key多个订阅者(可限制订阅者最大人数)
- 心跳支持(应用心跳和tcp keepalive)
- 支持安全验证(未授权用户不能订阅)
- 多协议支持(websocket,tcp)
- 详细的统计信息
- 可拓扑的架构(支持增加和删除comet节点,web节点,message节点)
- 利用Zookeeper支持故障转移
安装(版本1.0.5)
一、安装依赖
1
2
|
$
yum -y install java-1.7.0-openjdk $
yum -y install gcc-c++ |
二、搭建zookeeper
1.新建目录
1
2
3
|
$
mkdir -p /data/apps $
mkdir -p /data/logs/gopush-cluster $
mkdir -p /data/programfiles |
2.下载zookeeper,推荐下载3.4.5或更高版本
1
2
3
|
$
cd /data/programfiles $
wget http: //mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.5/zookeeper-3.4.5.tar.gz $
tar -xvf zookeeper-3.4.5.tar.gz -C ./ |
3.启动zookeeper(zookeeper的集群配置在这里不做详细介绍,如果有多台机器,建议做集群)
1
2
3
|
$
cp /data/programfiles/zookeeper-3.4.5/conf/zoo_sample.cfg /data/programfiles/zookeeper-3.4.5/conf/zoo.cfg $
cd /data/programfiles/zookeeper-3.4.5/bin $
./zkServer.sh start |
三、搭建redis
1
2
3
4
5
6
7
8
9
10
11
|
$
cd /data/programfiles $
wget http: //download.redis.io/releases/redis-2.8.17.tar.gz $
tar -xvf redis-2.8.17.tar.gz -C ./ $
cd redis-2.8.17/src $
make $
make test $
make install $
mkdir /etc/redis $
cp /data/programfiles/redis-2.8.17/redis.conf /etc/redis/ $
cp /data/programfiles/redis-2.8.17/src/redis-server /etc/init.d/redis-server $
/etc/init.d/redis-server /etc/redis/redis.conf |
- 如果如下报错,则安装tcl8.5(参考附资料2)
1
2
3
4
5
|
which:
no tclsh8.5 in (/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/geffzhang/bin) You
need 'tclsh8.5'
in order to run the Redis test Make[1]:
*** [test] error 1 make[1]:
Leaving directory ‘/data/program files/redis-2.6.4/src’ Make:
*** [test] error 2! |
四、安装git工具(如果已安装则可跳过此步)
参考:git
$ yum -y install git
五、搭建golang环境
1.下载源码(根据自己的系统下载对应的安装包)
1
2
3
|
$
cd /data/programfiles $
wget -c --no-check-certificate https: //go.googlecode.com/files/go1.3.linux-amd64.tar.gz $
tar -xvf go1.3.linux-amd64.tar.gz -C /usr/local |
2.配置GO环境变量 (这里我加在/etc/profile.d/golang.sh)
1
2
3
4
5
6
|
$
vim /etc/profile.d/golang.sh #
将以下环境变量添加到profile最后面 export
GOROOT=/usr/local/go export
PATH=$PATH:$GOROOT/bin export
GOPATH=/data/apps/go $
source /etc/profile |
六、部署gopush-cluster
1.下载gopush-cluster及依赖包
$ ./dependencies.sh
-
如果提示如下,说明需要安装谷歌的hg工具(安装mercurial,参考附资料1)
12go: missing Mercurial command. See http:
//golang.org/s/gogetcmd
package code.google.com/p/go.net/websocket: exec:
"hg"
: executable file not found in $PATH
2.安装message、comet、web模块(配置文件请依据实际机器环境配置)
1
2
3
4
5
6
7
8
9
10
11
12
|
$
cd $GOPATH/src/github.com/Terry-Mao/gopush-cluster/message $
go install $
cp message-example.conf $GOPATH/bin/message.conf $
cp log .xml
$GOPATH/bin/message_log.xml $
cd ../comet/ $
go install $
cp comet-example.conf $GOPATH/bin/comet.conf $
cp log .xml
$GOPATH/bin/comet_log.xml $
cd ../web/ $
go install $
cp web-example.conf $GOPATH/bin/web.conf $
cp log .xml
$GOPATH/bin/web_log.xml |
到此所有的环境都搭建完成!
七、启动gopush-cluster
1
2
3
4
|
$
cd /$GOPATH/bin $
nohup $GOPATH/bin/message -c $GOPATH/bin/message.conf 2>&1 >> /data/logs/gopush-cluster/panic-message. log
& $
nohup $GOPATH/bin/comet -c $GOPATH/bin/comet.conf 2>&1 >> /data/logs/gopush-cluster/panic-comet. log
& $
nohup $GOPATH/bin/web -c $GOPATH/bin/web.conf 2>&1 >> /data/logs/gopush-cluster/panic-web. log
& |
八、测试
1.推送单个私信(例:消息过期时间为expire=600秒)
1
|
$
curl -d "{\"test\":1}"
http: //localhost:8091/1/admin/push/private?key=Terry-Mao\&expire=600 |
成功返回:{"ret":0}
2.批量推送私信
1
|
$
curl -d "{\"m\":\"{\\\"test\\\":1}\",\"k\":\"t1,t2,t3\"}"
http: //localhost:8091/1/admin/push/mprivate?expire=600 |
成功返回:{"data":{"fk":["t1","t2"]},"ret":0}
-
字段
m
是消息体,k
是要批量推送的订阅key,每个key用,
分割。12注:1)新版推送的消息内容必须是json格式,否则获取消息时会报错.
2)批量推送正常情况下是没有`fk`字段的,如果有部分推送失败则返回`fk`,结构为字符串数组.
3.获取离线消息接口
在浏览器中打开:
http://localhost:8090/1/msg/get?k=Terry-Mao&m=0
成功返回:
1
2
3
4
5
6
7
8
|
{ "data" :{ "msgs" :[ { "msg" :{ "test" :1}, "mid" :13996474938346192, "gid" :0} ] }, "ret" :0 } |
4.获取节点接口
在浏览器中打开:
http://localhost:8090/1/server/get?k=Terry-Mao&p=2
成功返回:
1
2
3
4
5
6
|
{ "data" :{ "server" : "localhost:6969" }, "ret" :0 } |
九、附资料
1.下载安装hg
1
2
3
4
5
|
$
wget http: //mercurial .selenic.com /release/mercurial-1 .4.1. tar .gz $ tar
-xvf mercurial-1.4.1. tar .gz $ cd
mercurial-1.4.1 $ make $ make
install |
- 如果安装提示找不到文件‘Python.h’ 则需要安装 python-devel
$ yum -y install python-devel
- 如果报错:couldn`t find libraries,则添加环境变量
$ export PYTHONPATH=/usr/local/lib64/python2.6/site-packages
2.安装tcl8.5
1
2
3
4
5
6
7
8
|
$ cd
/data/programfiles $
wget http: //downloads .sourceforge.net /tcl/tcl8 .5.10-src. tar .gz $ tar
-xvf tcl8.5.10-src. tar .gz
-C ./ $ cd
tcl8.5.10 $ cd
unix $
. /configure $ make $ make
install |
配置
web节点的配置文件示例:
comet节点的配置文件示例:
message节点的配置文件示例:
例子
java: gopush-cluster-sdk
ios: CocoaGoPush
javascript: gopush-cluster-javascript-sdk
文档
web节点相关的文档:
内部协议主要针对内部管理如推送消息、管理comet节点等。
客户端协议主要针对客户端使用,如获取节点、获取离线消息等。
comet节点相关的文档:
客户端协议主要针对客户端连接comet节点的协议说明。
内部RPC协议主要针对内部RPC接口使用的说明。
message节点的相关文档:
内部RPC协议主要针对内部RPC接口的使用说明。
架构
项目主页:http://www.open-open.com/lib/view/home/1415176479262
有疑问加站长微信联系(非本文作者)