使用 Netty 框架做 p2p 消息中转服务端程序,有哪些较好的设计思路?

2019-11-22 17:49:52 +08:00
 tctc4869

netty 做 p2p 消息中转服务端程序。首先如果要实现 p2p 消息中转,那么肯定要先实现类似 Http 中 Session 一样的 map 类型的对象,像登记登录用户那样登记连接上的客户端进行管理。只不过这里不再是 Http 请求的客户端,而是 Socket 建立连接的客户端。我目前想到的思路纯粹的来说,有三种,同步应答,消息缓存,异步等待转发

目前实现了一个基于同步应答的 P2P 通信程序。这个要求双方必须同时在线。不然无法做到通信。其中优点是双方能向对方确定通信的信息是否发送到了

另外两个方式是基于 Map 的消息缓存和异步线程等待转发,可以实现发送方和接收方不同时在线的情况下进行通信,不过这两个方式相比同步应答有限制,例如发送方发送数据后退出了,那不能确认接收方是否收到了消息。

异步等待转发,发送方把数据发送到服务器之后,开个异步线程,线程代码块里面写个 white 死循环,内容为每过一段时间遍历 sesssion 是否有了目标客户端的 id,若有就发过去,然后终止死循环。或者过期之后终止。

消息缓存。这种方式是服务端把发送方的要发送的数据放到消息缓存库,然后等待接收方登录,并遍历消息缓存是否有自己的通信消息,若有就取出来。若一直没客户端接收,则超过过期时间之后删除消息,消息缓存库可以用例如 map,或者 redis 这种高性能缓存库。

消息缓存和异步线程等待这两种方式各位推荐哪个?各位还有哪些 p2p 通信中转服务端程序较好的设计思路?

如果不是 p2p,而是群发的话,那哪种思路比较好?

2723 次点击
所在节点    Java
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/622210

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX