ChatClient#send部分关于quit的处理

来源:7-9 NIO模型实现ChatClient_2

EverL

2019-09-09

UserInputHandler中不是已经处理了quit操作么?

不过那个处理没有关闭socket而是直接结束线程。但是如果老师想在send处理时在关闭socket,那么之前bio处理时ChatClient又没有进行这样的操作?也就是我这个问题的由来

写回答

1回答

Stannum

2019-09-17

同学你好~

关于BIO聊天室的退出处理,我已经在另外一个问题中回答过了~

在NIO模型实现中,当用户输入quit命令,我们需要有一个方法使得客户端的主线程可以从selector的select方法的阻塞调用中退出。在send()方法中检测到quit命令之后关闭selector,会使阻塞调用的select()抛出ClosedSelectorException异常。我们在截住这个异常的时候,就可以处理客户端的退出。我们使用这种方法来实现客户端,一个很重要的原因就是要为大家演示讲解select()可能抛出的这个ClosedSelectorException异常。

当然了,这不是唯一的一个处理客户端退出的方法。我也给大家留一个问题,你可不可以使用另一种方法来实现客户端的退出,而又不需要抛出ClosedSelectorException异常呢?实现完毕的同学可以提交你的代码(一个小提示,可以使用AtomicBoolean)

0
1
EverL
明白了,需要关闭的资源不同,导致了不同的处理。不过Selector也可以在通过ChatClient实现一个回调接口来实现,然后UserInputHandler触发回调吧?
2019-09-17
共1条回复

系统学习Java网络编程 深度理解BIO/NIO/AIO

对比式学习助你真正理解BIO/NIO/AIO三大网络编程模型。

880 学习 · 148 问题

查看课程