V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tctc4869
V2EX  ›  Java

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

  •  
  •   tctc4869 · 2019-11-22 17:49:52 +08:00 · 2710 次点击
    这是一个创建于 1588 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1185 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:08 · PVG 07:08 · LAX 16:08 · JFK 19:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.