Java 用于低级别UDP消息传递系统的ByteBuffers替代方案
我正在为加密的P2P体系结构开发一个低级UDP消息层,如果有兴趣,您可以阅读更多有关它的信息 我构建了一个简洁的序列化框架,将POJO转换为紧凑的ByteBuffers,还构建了各种库,使使用对称和非对称加密变得相当轻松 我现在正在开发消息传递框架,它利用动态代理实现与GWT的RPC机制类似的功能 我的问题是,早期我决定让序列化机制读写ByteBuffers。我现在发现这有几个问题:Java 用于低级别UDP消息传递系统的ByteBuffers替代方案,java,nio,bytebuffer,Java,Nio,Bytebuffer,我正在为加密的P2P体系结构开发一个低级UDP消息层,如果有兴趣,您可以阅读更多有关它的信息 我构建了一个简洁的序列化框架,将POJO转换为紧凑的ByteBuffers,还构建了各种库,使使用对称和非对称加密变得相当轻松 我现在正在开发消息传递框架,它利用动态代理实现与GWT的RPC机制类似的功能 我的问题是,早期我决定让序列化机制读写ByteBuffers。我现在发现这有几个问题: 在序列化对象之前,您需要知道bytebuffer的最大大小 它们是可变的,因此容易出错 它们与Datagram
- 在序列化对象之前,您需要知道bytebuffer的最大大小
- 它们是可变的,因此容易出错
- 它们与DatagramPacket并不特别兼容,而且DatagramChannel令人困惑
有人能提出在这个框架中实现序列化的替代方法吗?可能值得一看——它可能适合您的需要,或者您也可以看看他们是如何在幕后完成工作的 顺便说一句,它们确实为TCP和UDP连接使用ByteBuffers。我认为诀窍是从ByteBuffers中抽象出来,这样任何客户端代码都可以使用POJO。要做到这一点,您显然需要在某个地方有逻辑,可以将一个大对象分解为多个缓冲写入 我认为您实际上仍然希望使用ByteBuffers,因为它们速度非常快,支持各种本机加速技巧,而且不管您喜欢与否,最终都需要在高吞吐量IO环境中处理缓冲 有人能提出在这个框架中实现序列化的替代方法吗 在这里,我要谈谈您主要关心的问题:
- 在序列化对象之前,您需要知道bytebuffer的最大大小
- 它们是可变的,因此容易出错
- 它们与DatagramPacket并不特别兼容,而且DatagramChannel令人困惑
它们很好,您只需要将对象拆分为多个数据包。如果您使用缓冲区,请坚持使用缓冲区,这应该很好。哦,如果您对这个项目感兴趣,我需要可靠的Java程序员的帮助,请联系。是的,我看过Kryonet,但我认为它不支持我需要的那种低级加密,所以我必须自己开发。嗯,很棘手。总是有可能把加密层合并成kryonet作为某种扩展?否则,听起来你将要重新发明很多轮子……有时,重新发明轮子的唯一替代方法是将一个方形的钉子敲入一个圆孔(耶,混合隐喻!;)一般来说,在使用UDP时,你需要调整对象的大小,以确保能够装入单个数据包。UDP不能保证交付或顺序,因此您必须在设计时牢记这些限制。也就是说,它适用于传输频繁更新的数据(即游戏中的实体转换)或与尽力而为的更新(即P2P交换中的块)配合良好的数据。@Jolly,即使对于游戏,您也需要发送大小可能超过兆字节的初始状态,因此它不适合单个UDP数据包,然后需要(N)ACK等等。当然,UDP有它的局限性,没有任何保证,所以选择它而不是TCP应该是合理的。