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
期待
超级期待
期待,刚刚再弄这个房间id绑定呢
可以,期待
牛逼
只有comet是代码还没有搬运完吧
期待 什么时候代码上传啊
goim v2.0已经在testing状态了
comet 上行 发送消息 这个功能有开发吗?
@XuHiFans 可以跑起来了,还需完整测试下,到时弄个测试环境
目前的实现还是短连接吧 感觉这里细节很多 如果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启动的时候这们,其他两个服务都没有问题
@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 明白了,非常感谢!