Terry-Mao/goim

goim v2.0 Roadmap

Closed this issue · 36 comments

v2.0 Roadmap:

  • 在线信息,router换成了redis
  • 支持节点与redis在线心跳维持
  • 支持gRPC,及Discovery服务发现
  • 支持节点连接数和权重调度
  • 支持节点按区域调度
  • 支持指令订阅
  • 支持当前连接房间切换
  • 支持多房间类型({type}://{room_id})
  • 支持房间消息聚合
  • 支持按device_id发送消息
  • 支持IPv6

v2.1 Roadmap:

  • websocket支持permessage-deflate压缩
  • 消息队列接口抽象

Structure:

├── cmd
│   ├── comet
│   ├── job
│   ├── logic
├── api
│   ├── comet
│   ├── logic
├── internal
│   ├── comet
│   ├── logic
│   ├── job
├── pkg
│   ├── grpc
│   ├── bufio
│   ├── websocket
│   ├── xxx
├── benchmarks
├── examples
├── scripts
├── docs

branch: v2.0

准备搞个大新闻,@ALL ~

weisd commented

期待

超级期待

期待,刚刚再弄这个房间id绑定呢

可以,期待

牛逼

weisd commented

只有comet是代码还没有搬运完吧

期待 什么时候代码上传啊

大家详细可以看 v2.0 分支正在更新,要是发现有问题可以发出来一起讨论下~

goim v2.0已经在testing状态了

comet 上行 发送消息 这个功能有开发吗?

@XuHiFans 可以跑起来了,还需完整测试下,到时弄个测试环境

@starsea 目前已经有支持上下行的

@starsea 目前已经有支持上下行的

具体实现在哪呢 没看到呀

image
@starsea 可以直接把消息转发到logic里,我们现在定义>=1000 为业务指令消息,如果1000以下为系统指令

目前的实现还是短连接吧 感觉这里细节很多 如果client 发送很频繁 logic 和 comet 是不是又要维护长连接

现在模块之间通过grpc进行通信,也是基于http2的长连接的

想问一下有没有人试过做集群,到底要怎么配置,我现在kafka两台机上部署了集群,都布了一套goim在两台机上,kafka A机发B机能收到,goim的ws连上之后A机发的都收不到,是不是还要在logic.config或者comet.config上配置? @Terry-Mao

有没有2.0的安装部署教程,简单一点也行,部署试试

@zxiaofee001 等我们准备下,到时提交到scripts目录下,应该包括jdk/zookeeper/kafka/app这些脚本

@tonyboxes 期待ing,辛苦了。。

痛苦。。。我看着文档不知道怎么用。。。有没有详细点的。
例如说怎么创建用户和房间

老铁们,makefile已经加上了,javascript client也可以直接连接demo server了,相关文档我再逐步整理到wiki上面。

v2.0 已经测试完成,大家有空多帮review下,下一步准备相关文档到 goim.io。

今天准备部署下试试,现有部署的文档吧

goim.io 有相关文档,后面会把指令协议相关的都会补全

[client.go:560] discovery: client.Get(http://127.0.0.1:7171/discovery/polls?appid=infra.discovery&env=&hostname=MacBook-Pro.local&latest_timestamp=0) get error code(-404)
请教一下这个问题怎么解决

http://goim.io/tutorials/#configuration

goim和discovery需要加上对应的env超级超级才可以,按环境进行服务发现的

@tonyboxes 再请教一个问题client.go:558] discovery: client.Get(http://127.0.0.1:7171/discovery/polls?appid=infra.discovery&appid=goim.logic&env=dev&hostname=MacBook-Pro.local&latest_timestamp=1545811582446247000&latest_timestamp=0) get error code(-404)
为什么这会出现两个appid呢

只有comet启动的时候这们,其他两个服务都没有问题

@hcj112 这个应该是logic日志的?会取在线的comet节点,通过权重下发IP列表,/goim/nodes/weighted

@tonyboxes comet 上行怎么发送消息给某个房间或者某个人呢?

http://goim.io/examples/
http://goim.io/docs/push.html

@hcj112 可以看看相关文档,可以通过logic推送消息

@tonyboxes 这个http push api我都能跑通了,我想说的是目前好像没有实现直接通过wesocket或TCP直接发送给消息或者房间
func (s *Server) Operate(ctx context.Context, p *model.Proto, ch *Channel, b *Bucket) error {
switch {
case p.Op >= model.MinBusinessOp && p.Op <= model.MaxBusinessOp://业务消息
// TODO ack ok&failed
if err := s.Receive(ctx, ch.Mid, p); err != nil {
log.Errorf("s.Report(%d) op:%d error(%v)", ch.Mid, p.Op, err)
}
//p.Body = nil
case p.Op == model.OpChangeRoom:
if err := b.ChangeRoom(string(p.Body), ch); err != nil {
log.Errorf("b.ChangeRoom(%s) error(%v)", p.Body, err)
}
p.Op = model.OpChangeRoomReply
case p.Op == model.OpSub:
if ops, err := strings.SplitInt32s(string(p.Body), ","); err == nil {
ch.Watch(ops...)
}
p.Op = model.OpSubReply
case p.Op == model.OpUnsub:
if ops, err := strings.SplitInt32s(string(p.Body), ","); err == nil {
ch.UnWatch(ops...)
}
p.Op = model.OpUnsubReply
default:
return errors.ErrOperation
}
return nil
}

这个好像是旧代码,需要自己在logic conn.go 实现对应上行消息逻辑

@tonyboxes 明白了,非常感谢!