2011-12-07 122 views
0

我有一个二进制协议,有一些未知数量的初始头数据(未知长度,直到头完全解码),后面是应该写入磁盘供后续处理的数据流。如何处理netty中大部分写入磁盘的大流(使用ChunkedWriteHandler?)?

我有一个解码头的实现,然后将文件数据写入磁盘,因为它来自ChannelBuffers中的一个或多个帧(所以我的处理程序子类FrameDecoder,并逐步构建消息,而不是等待一个ChannelBuffer包含整个消息,并将文件数据写入每个帧的磁盘)。我担心这是否足够,或者如果使用像ChunkedWriteHandler这样的东西比这更多,并且处理大量上传是必要的。

是否有更好的方式处理文件数据,而不仅仅是将每个帧从ChannelBuffer直接写入磁盘?

回答

2

只要吞吐量足够好就应该足够了。否则,当接收到的数据量不够大时,您可能需要缓冲接收到的数据,以避免系统调用过于频繁(比如32KiB有界缓冲区)。

如果将transferTo/From操作暴露给用户,Netty可能会更快,但此功能尚不可用。

+0

谢谢!关于缓冲区的好建议,我没有考虑过小框架。 –

1

如果你的Handler你也应该考虑在前面添加一个ExecutionHandler。这将帮助你不被磁盘I/O阻塞。否则,您可能会看到繁重的磁盘访问速度下降。