Terry-Mao/gopush-cluster
是一個支持集羣的comet服務(支持websocket,和tcp協議)。
特性
- 輕量級
- 高性能
- 純Golang實現
- 支持消息過期
- 支持離線消息存儲
- 支持單個以及多個私信推送
- 支持單個Key多個訂閱者(可限制訂閱者最大人數)
- 心跳支持(應用心跳和tcp keepalive)
- 支持安全驗證(未授權用戶不能訂閱)
- 多協議支持(websocket,tcp)
- 詳細的統計信息
- 可拓撲的架構(支持增加和刪除comet節點,web節點,message節點)
- 利用Zookeeper支持故障轉移
安裝(版本1.0.5)
一、安裝依賴
$ yum -y install java-1.7.0-openjdk
$ yum -y install gcc-c++
二、搭建zookeeper
1.新建目錄
$ mkdir -p /data/apps
$ mkdir -p /data/logs/gopush-cluster
$ mkdir -p /data/programfiles
2.下載zookeeper,推薦下載3.4.5或更高版本
$ 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的集羣配置在這裏不做詳細介紹,如果有多臺機器,建議做集羣)
$ 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
$ 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)
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.下載源碼(根據自己的系統下載對應的安裝包)
$ 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)
$ 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)
go: 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模塊(配置文件請依據實際機器環境配置)
$ 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
$ 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秒)
$ curl -d "{\"test\":1}" http://localhost:8091/1/admin/push/private?key=Terry-Mao\&expire=600
成功返回:{"ret":0}
2.批量推送私信
$ 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用,
分割。注:1)新版推送的消息內容必須是json格式,否則獲取消息時會報錯. 2)批量推送正常情況下是沒有`fk`字段的,如果有部分推送失敗則返回`fk`,結構爲字符串數組.
3.獲取離線消息接口
在瀏覽器中打開:
http://localhost:8090/1/msg/get?k=Terry-Mao&m=0
成功返回:
{
"data":{
"msgs":[
{"msg":{"test":1},"mid":13996474938346192,"gid":0}
]
},
"ret":0
}
4.獲取節點接口
在瀏覽器中打開:
http://localhost:8090/1/server/get?k=Terry-Mao&p=2
成功返回:
{
"data":{
"server":"localhost:6969"
},
"ret":0
}
九、附資料
1.下載安裝hg
$ 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
$ 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接口的使用說明。
架構