Java Netty中基于连接的UDP协议

Java Netty中基于连接的UDP协议,java,udp,netty,Java,Udp,Netty,我需要为现有协议创建一个客户端。我相信Netty会使这一点相对简单,但需要一些入门帮助 该协议使用基于连接的方法,但分层在UDP之上,将实际消息放在传输信封内,将无序/缓慢/丢失的数据包、会话编号等都包含在客户端的所有工作中 在netty中创建管道和帧解码器等的最佳方法是什么。我以前只以一种非常基本的方式使用过netty,所以任何建议都是非常受欢迎的 谢谢 詹姆斯:听起来很痛苦。我是一个普通的netty用户,但我不会在netty中实现这样的协议(不是对netty的攻击,但它是在其他地方实现的),

我需要为现有协议创建一个客户端。我相信Netty会使这一点相对简单,但需要一些入门帮助

该协议使用基于连接的方法,但分层在UDP之上,将实际消息放在传输信封内,将无序/缓慢/丢失的数据包、会话编号等都包含在客户端的所有工作中

在netty中创建管道和帧解码器等的最佳方法是什么。我以前只以一种非常基本的方式使用过netty,所以任何建议都是非常受欢迎的

谢谢


詹姆斯:听起来很痛苦。我是一个普通的netty用户,但我不会在netty中实现这样的协议(不是对netty的攻击,但它是在其他地方实现的),至少按照您描述的方式。在您继续这条路之前,我将看看哪个实现了“可靠的UDP”堆栈,它具有您概述的所有传输功能

我的第一次尝试(如果我在一个荒岛上)是这样的:

下游

sendMessage
  --> MessageSplitHandler
    --> MessageFragmentBufferHandler
RetransmitRequester -->
其中:

  • MessageSplitHandler将发送的消息分解为UDP友好大小的消息片段(数据报)(如果原始消息足够小,可能会有一个)。对于从父消息创建的每个MessageFragment,分配:
    • 父消息的唯一id
    • 序列号
    • 从原始文件创建的片段总数
  • MessageFragmentBufferHandler存储每个MessageFragment,直到远程端确认已接收到消息(或者您选择超时消息重新组装并重试) 丢弃未确认的消息)。否则,请保留它们,以防远程请求MessageFragment重新传输(可能是通过父消息id和片段序列)
上游

sendMessage
  --> MessageSplitHandler
    --> MessageFragmentBufferHandler
RetransmitRequester -->
这将或多或少与下游相反

   MessageFragmentDecoder <--
  MessageFragmentBuffer <--
 MessageReAssember <--
onMessage

MessageFragmentDecoder谢谢-我会在mo中仔细阅读这一点…你认为这总体上是一个糟糕的想法,我完全同意,但服务器在那里,它使用这个协议,我想成为一个客户机,所以我也必须这样做。Legacy…这看起来非常合理。我需要查看netty调用以添加se进入管道。如果我能成功,我会发布一些东西!thx!你可能在netty doc中看到了这一点,但为了确保你不会被撕掉头发,数据报的最大大小是1024字节…:)