SocketChannel.write()在一个线程中处理多个客户端

时间:2011-11-10 07:09:37

标签: java nio socketchannel

我的应用程序有一个带有“传出网络数据包”的队列(内部有一个ByteBuffer和一个SocketChannel的POJO),由一个将数据写入SocketChannel的线程使用

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

谁能告诉我这样工作会出错? SocketChannels是从ServerSocketChannel创建的,因此它们会阻止。

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

如果客户端套接字无法在一次写入中消耗所有数据(非阻塞),则可以关闭客户端。这只会在缓冲区填充时发生,因此您可以将套接字的发送缓冲区增加到您愿意这样做的水平。