這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
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 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.下載源碼(根據自己的系統下載對應的安裝包)
?
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/go export PATH=$PATH:$GOROOT/bin export 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 $ 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
?
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 ./ $ cd tcl8.5.10 $ cd unix $ . /configure $ make $ make install |