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