我正在构建一个小型客户端/服务器聊天应用程序。我NIO.2
在尝试使用经典NIO
库模拟它后遇到了它。
我使用 classisc NIO 对 NIO.2 库进行“模拟”的目标是在通过 a 成对连接的多个线程中使用多个选择器ArrayBlockingQueue
,以避免网络读写时间。
我的问题是,如何在 NIO.2 库中使用AsynchronousSocketChannels
和CompletionHandlers
(根据我的理解作为回调)同时处理多个事件?
经典的NIO
lib 使用Selectors
which 在select
调用 a后交付key set
。这key set
然后可以遍历每个事件(阅读,接受并写入)可以处理一个又一个。
在NIO.2
另一方面回调,没有这样的序列。它们是异步的。那么,例如,如果 2 个客户端在同一时刻向服务器发送消息,会发生什么?
那么 2 个回调是否同时运行?如果是,那么如何?它们是否都在单独的线程中运行?
如果我要从每个回调中获取这些消息并尝试将它们排入队列,如前所述ArrayBlockingQueue
,它们会相互等待吗?
慕的地6264312
相关分类