Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

单点或群聊发送消息不走Socket,看了再关 #85

Open
s949492225 opened this issue Apr 2, 2020 · 3 comments
Open

单点或群聊发送消息不走Socket,看了再关 #85

s949492225 opened this issue Apr 2, 2020 · 3 comments
Labels
question Further information is requested

Comments

@s949492225
Copy link

Bug 描述
对于客户端来说,相互间的通信都是基于socket的,它不应该关注消息转发的逻辑.

1.在这点上消息发送上不统一,职责也不太清晰.
2.如果将来改成真正的点对点通信,类似于局域网内部传输,这种转发模式很致命
3.客户端模块应该是独立的,毕竟应该是两个人之间通信(转发是内部逻辑,不应该暴露给客户端).

可以考虑客户端发送给socket服务器,收到后socket返回ack,由socket服务器向中控服务器发送转发请求,中控服务器收到后,发到处理队列,并发轮训处理队列,存储消息,查询转发服务器转发,或存入离线服务中.

@crossoverJie
Copy link
Owner

对于客户端来说,相互间的通信都是基于socket的,它不应该关注消息转发的逻辑.

这个我不太同意;客户端之间如果互相单独通信,那平台就没有意义了;比如微信不可能让你我单独私聊吧,所有消息都得经过平台,不然从业务上讲就没啥意义。

再从技术上讲,我们两个私聊的外网 IP 谁出?带宽之类的服务也是要钱的,必然得需要一个统一的服务器。

1.在这点上消息发送上不统一,职责也不太清晰.

客户端的职责仅只有发消息和收消息,不太清楚你说的职责不清晰是指他有了什么额外的职责。

2.如果将来改成真正的点对点通信,类似于局域网内部传输,这种转发模式很致命

真正的局域网点对点通信一般都是老师课堂教的 demo,没什么太大参考性。

3.客户端模块应该是独立的,毕竟应该是两个人之间通信(转发是内部逻辑,不应该暴露给客户端).

对于客户端来说只是一个消息发送的 http 接口而已,它并不清楚什么路由层是怎么处理的。

可以考虑客户端发送给socket服务器,收到后socket返回ack,由socket服务器向中控服务器发送转发请求,中控服务器收到后,发到处理队列,并发轮训处理队列,存储消息,查询转发服务器转发,或存入离线服务中.

这条不就和你说的点对点通信冲突了嘛,自然是需要一个服务器的;不过你说的由服务端转发我觉得才是职责不单一了,服务端应该只管接收消息然后推送消息,至于转发的事情交给 route 来做,这样一个是 route 可以水平扩展,服务端的职责也很单一。

任何架构都可以新增一层来解决问题我觉得非常有道理。

@crossoverJie crossoverJie added the question Further information is requested label Apr 2, 2020
@s949492225
Copy link
Author

确实通过http转发消失是最容易实现的,A<->B之间通信是不可能的,加一层c的话就是A<->C<->B,c作为一个转接层而已.

如果把C模糊化,那么就是A<->B之间的相互通信,虽然实际上AB没有直接的通信,,但是以面向对象的思维来考虑话,两个人应该是互相交流的,加个传话的,那么三个人之间也两两也是双向通信的.

你的架构是A->C->B,并不是直接双向通信的过程.其实这个是就是我所在意的点,虽然步骤复杂了,效率低了,却是通信的理解和对现实模拟的思考上的一个考虑

下面附上一个现代主流im的架构或者逻辑图(陌陌,weichat),他们之间都是相互通信的,希望可以说服你

20140908155552392

20140908155644246

@q757571446
Copy link

是的,但就http考量,消息丢失等问题。也很难处理

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

3 participants