0

我的应用程序有一个队列,其中包含“传出网络数据包”(带有 aByteBuffer和 a的 POJO SocketChannel),由将数据写入SocketChannel.

我这样做是为了保证每个应该接收数据包的客户端都能轮到它。这意味着SocketChannel.write()顺序写入多个客户端(一次= 1)。

谁能告诉我这样工作会出什么问题?SocketChannels是从 a 创建的,ServerSocketChannel所以它们是阻塞的。

我担心该write()操作可能会阻止 1 个客户端,使其他客户端等待...

4

2 回答 2

2

write() 操作确实可以在阻塞模式下阻塞。如果你想要公平和单线程,你将不得不使用非阻塞模式。

于 2011-11-10T07:29:30.080 回答
0

如果客户端套接字无法在一次写入(非阻塞)中消耗所有数据,您可以关闭客户端。这只会在缓冲区填满时发生,因此您可以将套接字的发送缓冲区增加到您可以轻松执行此操作的级别。

于 2011-11-10T09:34:22.177 回答