一个golang推送服务器集群:gopush-cluster

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)

    ?
    1
    2
    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模块(配置文件请依据实际机器环境配置)

?
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用,分割。

    ?
    1
    2
    注: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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值