這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
Terry-Mao/gopush-cluster 是一個支援叢集的comet服務(支援websocket,和tcp協議)。
特性
- 輕量級
- 高效能
- 純Golang實現
- 支援訊息到期
- 支援離線訊息儲存
- 支援單個以及多個私信推送
- 支援單個Key多個訂閱者(可限制訂閱者最大人數)
- 心跳支援(應用心跳和tcp keepalive)
- 支援安全驗證(未授權使用者不能訂閱)
- 多協議支援(websocket,tcp)
- 詳細的統計資訊
- 可拓撲的架構(支援增加和刪除comet節點,web節點,message節點)
- 利用Zookeeper支援容錯移轉
安裝(版本1.0.5)
一、安裝依賴
?
| 12 |
$ yum -y install java-1.7.0-openjdk$ yum -y install gcc-c++ |
二、搭建zookeeper
1.建立目錄
?
| 123 |
$ mkdir -p /data/apps$ mkdir -p /data/logs/gopush-cluster$ mkdir -p /data/programfiles |
2.下載zookeeper,推薦下載3.4.5或更高版本
?
| 123 |
$ 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的叢集配置在這裡不做詳細介紹,如果有多台機器,建議做叢集)
?
| 123 |
$ 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
?
| 1234567891011 |
$ 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 |
?
| 12345 |
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 testMake[1]: *** [test] error 1make[1]: Leaving directory ‘/data/program files/redis-2.6.4/src’Make: *** [test] error 2! |
四、安裝git工具(如果已安裝則可跳過此步)
參考:git
$ yum -y install git
五、搭建golang環境
1.下載源碼(根據自己的系統下載對應的安裝包)
?
| 123 |
$ 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)
?
| 123456 |
$ vim /etc/profile.d/golang.sh# 將以下環境變數添加到profile最後面export GOROOT=/usr/local/goexport PATH=$PATH:$GOROOT/binexport GOPATH=/data/apps/go$ source /etc/profile |
六、部署gopush-cluster
1.下載gopush-cluster及依賴包
$ ./dependencies.sh
2.安裝message、comet、web模組(設定檔請依據實際機器環境配置)
?
| 123456789101112 |
$ 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
?
| 1234 |
$ 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}
3.擷取離線訊息介面
在瀏覽器中開啟:
http://localhost:8090/1/msg/get?k=Terry-Mao&m=0
成功返回:
?
| 12345678 |
{ "data":{ "msgs":[ {"msg":{"test":1},"mid":13996474938346192,"gid":0} ] }, "ret":0} |
4.擷取節點介面
在瀏覽器中開啟:
http://localhost:8090/1/server/get?k=Terry-Mao&p=2
成功返回:
?
| 123456 |
{ "data":{ "server":"localhost:6969" }, "ret":0} |
九、附資料
1.下載安裝hg
?
| 12345 |
$ wget http://mercurial.selenic.com/release/mercurial-1.4.1.tar.gz$ tar-xvf mercurial-1.4.1.tar.gz$ cdmercurial-1.4.1$ make$ makeinstall |
- 如果安裝提示找不到檔案‘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
?
| 12345678 |
$ cd/data/programfiles$ wget http://downloads.sourceforge.net/tcl/tcl8.5.10-src.tar.gz$ tar-xvf tcl8.5.10-src.tar.gz -C ./$ cdtcl8.5.10$ cdunix$ ./configure$ make$ makeinstall |
配置
web節點的設定檔樣本:
web
comet節點的設定檔樣本:
comet
message節點的設定檔樣本:
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