demo要求:
1)编写一个NIO群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞)
2)实现多人群聊
3)服务器端:可以监测用户上线,离线,并实现消息转发功能。
4)客户端:通过channel可以无阻塞发送消息给其他所有用户(客户端),同时可以接受其他用户发送的消息(由服务器转发得到)
5)目的:进一步理解NIO非阻塞网络编程机制。
从Netty的Reactor模式看demo是单Reactor单线程模式。其实Netty是在NIO1.0的基础上封装了复杂的调用操作,解决了JDK1.6的NIO臭名昭著的Epoll Bug,方便程序员进行网络编程,提升效率。
以下代码:
服务器端实现的代码:
package com.tfq.netty.nio.groupchat;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.*;
import java.util.Iterator;
/**
* @author: fqtang
* @date: 2024/03/19/11:22
* @description: 服务器端
*/
public class GroupChatServer {
//定义属性
private ServerSocketChannel listenChannel;
private Selector selector;
private static final int PORT = 6667;
//构造器
public GroupChatServer() {
try {
//得到选择器
this.selector = Selector.open();
//获取监听通道
this.listenChannel = ServerSocketChannel.open();
//绑定端口
this.listenChannel.socket()
.bind(new InetSocketAddress(PORT));
//设置通道为非阻塞
this.listenChannel.configureBlocking(false);
//将该listenChannel注册到selector
this.listenChannel.register(selector, SelectionKey.OP_ACCEPT);
} catch(IOException e) {
e.printStackTrace();
}
}
/**
* 监听
*/
public void listen(){
try {
//循环处理
while(true) {
int count = selector.select();
if(count &g

本文介绍了如何使用JavaNIO实现一个群聊系统,包括服务器端的连接管理、非阻塞I/O、用户状态监控和消息转发,以及客户端的无阻塞通信。讨论了Netty的Reactor模式在单线程模式下的应用,并指出在高并发场景下可能面临的性能瓶颈。
最低0.47元/天 解锁文章
1178

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



