AIO的这个例子里 `else if ("write".equals(type)){}` 的代码是在什么时候被用到的?
来源:8-8 演示

皮卡乒乓
2020-07-26
我的理解是,AcceptHandler
的completed函数
里有写 info.put("type", "read");
,那么就对应到 ClientHandler
的completed函数
的if ("read".equals(type)){ }
分支,那么请问一下 else if ("write".equals(type)){}
这个分支的代码是不是在本例子没有被执行到?又或者是我理解错了,它具体在什么地方被执行的?
1回答
-
Stannum
2020-08-08
同学你好~在https://git.imooc.com/coding-381/aio-tutorial/src/master/Server.java#L94这里,我们调用了clientChannel.write(...)函数来把消息发送给客户,这个write函数是异步的,当这个异步write操作完成了之后,就会调用ClientHandler里面的completed函数:https://git.imooc.com/coding-381/aio-tutorial/src/master/Server.java#L94,在这个时候,我们就会发现刚刚完成的这个异步操作的type是"write",于是我们就知道接下来应该去调用clientChannel.read(...)函数来继续听取客户发送来的消息了。
也就是说,是ClientHandler自己不断地在调用clientChannel的read和write操作,这两个操作是交替被调用的,read完成了就调用write,write完成了就调用read,这样服务器才能不停地和客户通信
00
相似问题