3

我正在开发一个服务器应用程序,通过使用 Netty 将数据流式传输到客户端。基本上,有一个主服务器向我的应用程序提供数据,应用程序会将数据分发给注册用户。由于我的应用程序需要长期维护,而 Netty 3.5.8 和 Netty 4.0.0 在 API 方面有很大不同,所以我决定使用 Netty 4.0.0

但是,我遇到了一个问题,即当主服务器提供太多无法足够快地分发给客户端的数据时。堆内存使用量增加并导致内存不足,因此我尝试在写入数据之前检查客户端的缓冲区以防止此问题。我在网站(http://static.netty.io/4.0/xref/io/netty/example/discard/package-summary.html)中使用了丢弃示例,但它不起作用,因为有时堆内存已满在调用侦听器之前。我在 Netty 3.5.8 中查看此示例,发现该示例在写入数据之前检查实际缓冲区。它与 4.0.0 中的示例不同因此,我们是否有办法在将缓冲区写入 netty 4.0.0 之前检查缓冲区?

提前致谢。

4

1 回答 1

0

I had similar problem. The way I handled this is:

  1. When the server writes the data, the call which writes 64k'th byte is called synchronously. So the call gets blocked until the data is consumed by the other end.
  2. The other end does not consume the data until the data it has already consumed is processed and discarded.

Follow the same pattern throughout. It may slow things down a bit but will prevent out of memory error. Slowness should not be of concern since if it's of concern you already have a use case in your application architecture (outside of netty) which needs addressing.

于 2013-02-19T22:17:37.460 回答