千家信息网

Netty功能怎么实现

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要讲解了"Netty功能怎么实现",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Netty功能怎么实现"吧!Netty是年初最先学习的框架,近
千家信息网最后更新 2026年11月04日Netty功能怎么实现

这篇文章主要讲解了"Netty功能怎么实现",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Netty功能怎么实现"吧!

Netty是年初最先学习的框架,近期的图书租借系统想要用上聊天功能,实现一对一对话聊天,在用户登录服务端时,获取用户ip与id绑定,放入channelgroup,每次循环遍历这个ip对应的channel,否则返回false,在用户状态取到是否在线,在线状态属于handler消息功能。

1.一对一聊天

2.展示在线人数

3.登录验证

4.输入框优化

5.可支持表情

开源万岁

当寻找Netty一对一聊天功能实现的时候,除了重温下功能点,还能发现新的东西,一个小小的demo,别人却不是这么做的,细化到验证,还考虑到性能,看下实现效果页面

需要昵称输入,登录后不是简单的数据新增

 private static ReentrantReadWriteLock rwLock = new ReentrantReadWriteLock(true); private static ConcurrentMap userInfos = new ConcurrentHashMap<>(); private static AtomicInteger userCount = new AtomicInteger(0);

读写锁;

并发包;

原子计数;

因为最终实现用户的在线人数统计,用了原子类的AtomicInteger

 private static AtomicInteger uidGener = new AtomicInteger(1000);
private boolean isAuth = false; // 是否认证 private long time = 0; // 登录时间 private int userId; // UID private String nick; // 昵称 private String addr; // 地址 private Channel channel;// 通道

登录用户信息,确定昵称,获取ip,每一个用户ip,channel一一对应放入channelGroup。

如何发送消息?

在消息处理Handler中,重写channelread0方法

1.获取是否存在此用户信息的channel

2.存在将用户id,昵称,接收到的消息广播到页面显示

3.消息不为null,读写锁加锁,找到当前用户的channel

4.遍历用户信息,通过netty写入回调返回

 if (msg instanceof FullHttpRequest) {            handleHttpRequest(ctx, (FullHttpRequest) msg);        } else if (msg instanceof WebSocketFrame) {            handleWebSocket(ctx, (WebSocketFrame) msg);        }

将Handler接受接入到Server

1.定时关闭失效的channel

2.定时向客户端ping消息

Netty的消息处理流程

定义好父子线程组->在childInitializer定义好相关处理通道处理器-->自己提供处理器在回调

现在开始回调

.childHandler(new ChannelInitializer() {
@Override protected void initChannel(SocketChannel ch) throws Exception { 将group放入消息管道 ch.pipeline().addLast(defLoopGroup, //请求解码器 new HttpServerCodec(), //将多个消息转换成单一的消息对象 new HttpObjectAggregator(65536), //支持异步发送大的码流,一般用于发送文件流 new ChunkedWriteHandler(), //检测链路是否读空闲 new IdleStateHandler(60, 0, 0), //处理握手和认证 new UserAuthHandler(), //处理消息的发送 new MessageHandler() ); } });

定时处理失效消息

 // 定时扫描所有的Channel,关闭失效的Channel            executorService.scheduleAtFixedRate(new Runnable() {                @Override                public void run() {                    logger.info("scanNotActiveChannel --------");                    UserInfoManager.scanNotActiveChannel();                }            }, 3, 60, TimeUnit.SECONDS);
// 定时向所有客户端发送Ping消息 executorService.scheduleAtFixedRate(new Runnable() { @Override public void run() { UserInfoManager.broadCastPing(); } }, 3, 50, TimeUnit.SECONDS);

前端页面没有什么变化。

1.绑定websocket

2.websocket调用onmessage处理消息

window.socket = new WebSocket("ws://localhost:9688/websocket")

处理技术:

1.线程池

2.Lambad表达式

3.读写锁提高性能

4.原子引用保证原子性,线程安全

debug

用户登录,判断是否是给定的消息类型

获取昵称,用户信息,code码

==success,保存用户信息

第一次登陆没有此用户id与channel,不广播消息

用户计数0 broadCastPing userCount: 0

当发送消息到页面时

触发定时消息广播,遍历size

处理消息ctx.fireChannelRead(frame.retain());

此时广播用户计数broadCastPing userCount: 1

websocket实现了真正意义上的客户端与服务器端的长连接,节省带宽,而关注内容本身

websocket:1--:双向数据传递;

2--:基于Http

3--:非浏览器场合

感谢各位的阅读,以上就是"Netty功能怎么实现"的内容了,经过本文的学习后,相信大家对Netty功能怎么实现这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

消息 用户 处理 功能 登录 信息 昵称 原子 页面 在线 学习 广播 一对一 内容 客户 客户端 线程 验证 人数 处理器 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技小贷 互联网科技作文 南京欣网互联网科技 西安互联网科技公司 赫美联合互联网科技 互联网科技公司做什么 深圳卡尔迅互联网科技有限公司怎么样 互联网金融中的现代科技 彤创互联网科技有限公司 互联网科技与大数据专业 互联网公司黑科技创始人 卓翼科技产业互联网合作 广州千川互联网科技有限公司 美国互联网科技公司 济南小医互联网科技有限公司招聘 福州德业互联网科技 科技互联网行业投资研究 国产互联网科技公司 深圳互联网科技园地址 广东猫王互联网科技有限公司电话 喔噻互联网科技有限公司 互联网科技图片 互联网科技工作委员会副主任毛军 互联网巨头反垄断金融科技 居家互联网科技有限公司 移动互联网科技股 互联网营销推广黑科技 马化腾互联网科技教学 第三届互联网大会安防黑科技 陕西彩京云互联网科技有限公司
0