引言
在上篇文章中我们分析了服务端的启动流程。在服务端启动成功后,就可以开始监听端口,并且处理客户端的接入请求了。
服务端的 ServerChannel 是注册在 EventLoop 线程上的,而对客户端的接入处理也是从这个地方开始。因此,在这里我们需要首先分析下在 NioEventLoop。
NioEventLoop 的 run 方法
源码篇第一讲,我们曾分析过 NioEventLoop,它是一个特殊化的 SingThreadEventExecutor,因为其 run 方法的实现并不是单纯的从队列中取出任务执行,还包含了在 Selector 对象上执行等待的流程。对于在端口上监听客户端接入请求的服务端程序而言,显然其监听等待也是依靠了在 Selector 上的等待。那下面我们就看下其 run 方法的实现,具体如下:
protected void run()
{
for(;;)
{
try
{
try
{
switch(selectStrategy.calculateStrategy(selectNowSupplier, hasTasks()))
{
case SelectStrategy.CONTINUE:
continue;
c