Terry-Mao / goim

goim
https://goim.io/
MIT License
7.21k stars 1.78k forks source link

关于客户端推送消息的疑问 #285

Closed fananchong closed 5 years ago

fananchong commented 5 years ago

我看 goim 实现中, comet 并未实现 client ->comet->logic 的消息发送(单播、房间播、广播)。 而是在 logic 上开了 1 个 http 服务,来做消息发送。并做 Benchmark 测试。 因此这里有 2 个疑问:

  1. 这个 Benchmark 测试与实际生产环境的工作流程相差巨大,是否具有参考价值?
  2. 为什么回避 client ->comet->logic的消息发送,直接 logic 上开 http 服务,那岂不是 client 需要连接 logic 与 comet ?
listen-lavender commented 5 years ago

goim的一个连接貌似只能属于一个room

tsingson commented 5 years ago

我看 goim 实现中, comet 并未实现 client ->comet->logic 的消息发送(单播、房间播、广播)。 而是在 logic 上开了 1 个 http 服务,来做消息发送。并做 Benchmark 测试。 因此这里有 2 个疑问:

  1. 这个 Benchmark 测试与实际生产环境的工作流程相差巨大,是否具有参考价值?
  2. 为什么回避 client ->comet->logic的消息发送,直接 logic 上开 http 服务,那岂不是 client 需要连接 logic 与 comet ?

这个, 个人是这么想的, 不知合适不合适:

  1. 消息发送与消息接收, 分开的话, 对 bilibili 这类业务场景更好, 大规模部署下, 发消息少, 而看消息的多. 像 bilibili 弹幕, 看的人多, 发的人少.

  2. 终端实现简单了, 多数人是看消息, 这样 comet 只要接收消息就可以了, 尤其是流式接收消息, websocket 与 tcp 实现都简单. 而发消息, 需要用户注册后后才能发. 同时, 发消息也需要后台认证( 确认是注册用户) , 过滤一些不良词句.

  3. 部署上省事, 开发上也简单.

  4. 至于 benchmark 测试, 这里是基础测试, 没什么问题.