寻找Java "does everything buffer" - 决定与Netty合作



背景:

我正在开发一些java包,这些包需要获取数据,将其划分并在线分发到许多服务器。根据用户代码(使用我的包的人),我将知道使用哪种缓冲区。我已经看到Netty项目有一些有趣的概念和其他解决方案建议在这里的网站,但不是我所寻找的。我想我可以实现我的要求,但我更喜欢重用。

实际问题:字节缓冲区需求

将实现与接口分开。两个实现之间的更改。

固定大小:

  1. 直接内存使用。
  2. 分发时零拷贝IO。

生长大小

  1. 可以长到一定大小。
  2. 在重新分配和使用的内存数量之间保持平衡。

更新1:决定使用Netty项目库,因为它有很多其他的好处。

我想给出我的系统的一些细节。我需要在服务器网络中分发大量数据。我对缓冲区大小的了解非常少。有时它可以是固定大小,有时它可以是未知大小模式。我希望能够开发一种机制,享受这两个世界的好处。当我收到要检查的最终缓冲区时,我确实有一个已定义的事件。

我知道当缓冲区直接映射到内存时,它们可以执行得更好。妮蒂为我提供了这个,但我不能让这个缓冲增长。我有一个可以增长的动态缓冲区——netty也提供了。

几个问题:

  1. 我应该复制缓冲区从动态到直接,以防它被改变?有办法切换模式吗?

  2. 你认为实现一个类保存一个ChannleBuffer数组,并公开与ChannleBuffer相同的接口,同时包含"内部"一个缓冲区数组,根据需要分配新的直接内存。

  3. 您有其他的解决方案吗?

我会好好看看直接字节缓冲区的数组上的scatter/gather NIO。直接性为您提供了无复制I/O,数组为您提供了增长机制。

我发现Netty提供了我需要的所有东西,甚至更多。

最新更新