java - nio:从与选择不同的线程发送

java - nio: send from different thread than selecting

我经常听说 "good design" 有一个线程负责与客户端的所有通信。

但是,现在我有多个线程与其他服务器通信以处理客户端请求。

当前设计会将要发送给选择线程的响应排入队列。选择线程然后将响应从队列中取出并将它们发送到适当的客户端。

我觉得这很愚蠢。我有大约 30 个线程准备好向客户端发送响应,它们都将它们排入队列并让一个选择线程一个一个地发送它们。

假设一个封闭的系统,是否没有办法安全地绕过这个限制并从一个没有(或者如果他不相同)选择器的线程发送,作为最初接受客户端请求的线程?如果可以,怎么做?

Assuming a closed system, is there no way to safely bypass this limitation

没有这样的限制。您可以从任何您喜欢的线程发送。

and send from a thread that doesn't have a (or if he does not the same) selector as the thread that originally accepted the client request? If so, how?

只需调用SocketChannel.write()。唯一需要将写入写入选择器线程的情况是,如果写入的长度很短或长度为零,在这种情况下,需要为 OP_WRITE 注册通道、排队的数据等