回调在NIO.2库中的行为

鲍勃

我正在构建一个小型客户端/服务器聊天应用程序。NIO.2尝试使用经典NIO对其进行仿真后遇到

我使用classisc NIO“模拟” NIO.2库的目的是在多个线程中使用多个选择器,这些选择器成对通过aArrayBlockingQueue进行连接,以避免网络读写时间。

我的问题是,如何在NIO.2 lib中同时使用AsynchronousSocketChannels处理多个事件CompletionHandlers(据我理解,这些事件充当回调)?

经典的NIOlib使用Selectorsselect调用a之后传递key setkey set然后可以遍历每个事件(阅读,接受并写入)可以处理一个又一个。

NIO.2另一方面回调,没有这样的序列。他们是异步的。那么,例如,如果2个客户端在同一时间向服务器发送消息,会发生什么情况?

然后是否同时运行两个回调?如果是,那又如何?它们是否都在单独的线程中运行?

而且,如果我要从每个回调中获取这些消息并尝试像前面提到的那样ArrayBlockingQueue将它们放入队列中,它们是否会彼此等待?

雅各布·G

那么,例如,如果2个客户端在同一时间向服务器发送消息,会发生什么情况?

客户端不与服务器共享公共连接。在服务器端,您需要AsynchronousSocketChannel#read为两个客户端调用回调,这将在某些字节到达时触发。

因此,两个回调可以同时运行(因为它们是异步的),但是它们对于每个客户端仍然是独立的,因此不会有问题。

它们是否都在单独的线程中运行?

这取决于支持AsynchronousChannelGroup的线程池(您可以指定自己或使用默认组)。

我使用NIO.2创建了一个简单的网络库,希望对您有所帮助:https : //github.com/jhg023/SimpleNet

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

回调在NodeJ中不起作用

使回调在JavaScript中同步工作

回调在非阻塞设计中如何工作?

如何使Typescript方法回调在VueJs中工作?

如何处理异步回调在Java中的同步方式?

回调在ajax请求中不起作用?

客户端回调在 dash 中不起作用

进度回调在进度过程中不更新

GlutKeyboardFunc回调在openGL中不起作用

Twilio回调在我的.NET服务中不起作用

Need回调在Node.js中返回多个值

Swift-标签未从委托回调在WatchKit中更新

等待回调在控制器中返回

回调在Codeigniter 3.0中不起作用

Pre_deserialize回调在JMSSerializer中不起作用

回调在connect-mongo中不起作用

scrapy 回调在函数中不起作用

回调在请求 npm 中不起作用

jQuery无限滚动中的砌体回调在Wordpress中不起作用-也不是无限滚动插件

jQuery的添加函数在HTML attr中回调在其他事件中调用

回调在Angular2 / Firebase中生成“ TypeError:这是未定义的”

如何使用两个回调在JavaScript中返回异步调用(WIX corvid)

Active Record回调在使用STI的类中的生产中引发“未定义的方法”错误

Scrapy 回调在我的脚本中根本不起作用

侦听回调在Pusher API Laravel 5.4中不起作用

WebRTC:createOffer的成功回调在Chrome中调用了两次

spawn()函数的“ Close”回调在grunt插件中不起作用

为什么回调在带有 mysql 的 nodejs 中不起作用?

request.post() 回调在 Google Cloud Functions 中不起作用