我的应用程序有一个带有“传出网络数据包”的队列(内部有一个ByteBuffer
和一个SocketChannel
的POJO),由一个将数据写入SocketChannel
的线程使用
我这样做是为了保证每个应该接收数据包的客户端轮流使用。这意味着SocketChannel.write()
按顺序写入多个客户端(每次= 1)。
谁能告诉我这样工作会出错? SocketChannels
是从ServerSocketChannel
创建的,因此它们会阻止。
我担心write()
操作会阻止1个客户端,让其他客户端等待......
答案 0 :(得分:2)
write()操作确实可以在阻塞模式下阻塞。如果你想要公平和单线程,你将不得不使用非阻塞模式。
答案 1 :(得分:0)
如果客户端套接字无法在一次写入中消耗所有数据(非阻塞),则可以关闭客户端。这只会在缓冲区填充时发生,因此您可以将套接字的发送缓冲区增加到您愿意这样做的水平。