Skip to content

sngyai/goim

 
 

Repository files navigation

本地部署

安装golang与goland

安装jdk、kafka、redis

goim访问kafka、redis均使用的默认配置

Kafka

获取kafka

wget http://apache.mirrors.hoobly.com/kafka/2.6.0/kafka_2.13-2.6.0.tgz
tar -zxvf kafka_2.13-2.6.0.tgz 
cd kafka_2.13-2.6.0/

启动zookeeper

bin/zookeeper-server-start.sh config/zookeeper.properties

启动kafka

bin/kafka-server-start.sh config/server.properties

redis

直接下载安装启动,略过不表

如果redis设置了密码,需要在cmd/logic/logic-example.toml中修改redis节,添加auth = "******"

获取bilibili/discovery源码

git clone https://github.com/bilibili/discovery
cd discovery/cmd/discovery
go build

默认配置启动discovery服务

./discovery -conf discovery-example.toml

本地运行goim

获取goim源码

git clone https://github.com/Terry-Mao/goim

确保go module启用

go env -w GO111MODULE=on

获取依赖

go mod download

构建启动

make build
make run

关注target目录下的comet.logjob.loglogic.log,看有无错误日志

除此之外,其他日志位于/tmp/目录下,可以分别看到logic.comet.job.前缀的日志文件,如 /tmp/comet.INFO/tmp/comet.WARNING/tmp/comet.ERROR

如何停止

make stop

运行客户端

修改examples/javascript/client.js,注释掉 var ws = new WebSocket('ws://sh.tony.wiki:3102/sub'); 打开//var ws = new WebSocket('ws://127.0.0.1:3102/sub');

cd examples/javascript
go build
go run main.go

浏览器打开http://127.0.0.1:1999/

模拟云端下发消息

多播

curl -d 'This is a mid message~' http://127.0.0.1:3111/goim/push/mids?operation=1000&mids=123

聊天室

curl -d 'This is a room message...' http://127.0.0.1:3111/goim/push/room?operation=1000&type=live&room=1000

广播

curl -d 'This is a broadcast message!' http://127.0.0.1:3111/goim/push/all?operation=1000

单播

curl -d 'This is a unicast message~' http://127.0.0.1:3111/goim/push/keys?operation=1000&keys=cbe2d1b8-85c9-4bae-8333-3612e8ff751f

注意:单播的key是动态生成的(key = uuid.New().String()),要去redis查找

HKEYS mid_123

具体代码见internal/logic/dao/redis.go中的AddMapping方法

key也可以由客户端自己指定,方法是修改examples/javascript/client.js中的var token,添加 "key":"abc",

经验证,key重复的时候,同一时刻只能有一个会话在线,存在互踢的逻辑,位于internal/comet/bucket.goPut方法

if dch := b.chs[ch.Key]; dch != nil {
    dch.Close()
}

将Kafka替换为NATS

  • 安装并运行NATS
    go get github.com/nats-io/nats-server/v2
    nats-server
    
  • 更改配置 分别修改cmd/logic/logic-example.tomlcmd/job/job-example.toml,将其中的mqnats,如下:
    mq = "nats"
    

Packages

No packages published

Languages

  • Go 97.1%
  • Shell 2.5%
  • Makefile 0.4%