需求:
1、编写一个NIO群聊系统,实现服务端和客户端之间数据简单通讯(非阻塞)
2、实现多人群聊
3、服务端:可以监测用户上线、离线、并实现消息转发功能。
4、客户端:通过channel可以无阻塞发送消息给其他所有用户,同时可以接受其他用户发送的消息。
5、目的:进一步理解NIO非阻塞网络编程机制
服务端代码:GroupChatServer.java
@Slf4j
public class GroupChatServer {
//选择器
private Selector selector;
//监听器
private ServerSocketChannel serverSocketChannel;
//端口号
private static final int PORT = 8000;
//构造方法,初始化成员变量
public GroupChatServer(){
try {
//1 创建监听器
serverSocketChannel = ServerSocketChannel.open();
//2 创建选择器
selector = Selector.open();
//3 绑定端口号
serverSocketChannel.socket().bind(new InetSocketAddress(PORT));
//4 设置非阻塞模式
serverSocketChannel.configureBlocking(false);
//5 事件绑定
serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
}catch (Exception e){
e.printStackTrace();
}
}
//监听
public void listen(){
log.info("监听的线程号是:{}",Thread.currentThread().getId());
try {
//循环等待客户端连接
while(true){
int count = selector.select();
if(count > 0){
//表示有客户端连接
//遍历得到selectorKey
Iterator<SelectionKey> iterator = selector.selectedKeys().iterator();
while(iterator.hasNext()){
SelectionKey key = iterator.next();
//判断事件监听类型
if(key.isAcceptable()){
/*//事件:连接

最低0.47元/天 解锁文章
887

被折叠的 条评论
为什么被折叠?



