Java NIO学习(三)Selector监听事件+NIO服务器实例

本文是Java NIO系列的第三篇,介绍Selector如何选择就绪通道,探讨NIO非阻塞IO可能的阻塞问题,并通过一个模拟游戏服务器的实例,展示NIO服务端如何监听玩家上线事件。运行效果中,通过telnet命令模拟客户端连接,揭示了在win7系统中使用telnet的注意事项。
摘要由CSDN通过智能技术生成

书接上文

上一篇博客说了一下SelectionKey这个对象的一些常用属性,为这一篇文章的NIO服务器实例算是做了一些铺垫。不过在展示服务端实例代码之前,还要说几点细节上的东西。

Selector如何选择就绪的通道

//这个方法可能会阻塞,直到至少有一个已注册的事件发生,或者当一个或者更多的事件发生时
selector.select();

NIO明明是非阻塞的IO,为何会阻塞

这是第一章Java NIO学习(一)NIO相关概念中说的内容,作为非阻塞的IO操作,NIO为何会有这么一个可能会造成阻塞的方法呢,别急,selector对象有很多方法可以解决阻塞的问题!

//阻塞在select()方法上的线程也可以立刻返回,不阻塞
selector.selectNow();

//可以设置超时时间,防止进程阻塞
selector.select(long timeout);

//可以唤醒阻塞状态下的selector
selector.wakeup();

NIO服务端实例

本代码实例模拟一个游戏服务器,监听玩家上线的事件。

package nio;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Iterato
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值