一個golang推送伺服器叢集:gopush-cluster

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

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
  • 如果如下報錯,則安裝tcl8.5(參考附資料2)
?
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
  • 如果提示如下,說明需要安裝Google的hg工具(安裝mercurial,參考附資料1)

    ?
    12 go: missing Mercurial command. See http://golang.org/s/gogetcmdpackage code.google.com/p/go.net/websocket: exec: "hg": executable file not found in $PATH

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}

  • 欄位m是訊息體,k是要批量推送的訂閱key,每個key用,分割。

    ?
    12 注:1)新版推送的訊息內容必須是json格式,否則擷取訊息時會報錯.   2)批量推送正常情況下是沒有`fk`欄位的,如果有部分推送失敗則返回`fk`,結構為字串數組.

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.gztar -xvf mercurial-1.4.1.tar.gzcd mercurial-1.4.1makemake 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.gztar -xvf tcl8.5.10-src.tar.gz -C ./cd tcl8.5.10cd unix$ ./configuremakemake install
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.