
netty
netty
free_java
这个作者很懒,什么都没留下…
展开
-
Netty (10)-WebSocket
搭建服务基本配置参考。本篇仅介绍实现WebSocket服务器的关键代码。原创 2024-03-05 09:28:46 · 621 阅读 · 1 评论 -
Netty (9)-自定义连接参数
web项目中有session的概念,可以保存和获取每个用户的参数。netty也有类似功能,可以设置每个连接的参数。设置和获取参数每个参数需要设置一个attributeKey,使用比较简单,主要就是get和set。每个连接的attributeKey参数值是隔离的。public class MyHandler extends SimpleChannelInboundHandler<String> { AttributeKey<String> attributeKey原创 2021-05-15 11:05:35 · 2012 阅读 · 0 评论 -
Netty (8)-心跳机制
当客户端断开连接的时候,服务端需要及时的将这个连接关闭,以释放资源。所以通常每隔一定时间,客户端会向服务端发送心跳消息,证明自己的存在,否则服务端就认为客户端已经断开。IdleStateHandlerIdleStateHandler可用来检测心跳消息,三个参数分别为,读空闲时间、写空闲时间、读或写空闲,最后参数为时间单位,这里是分钟。即3分钟内没有读取到任何消息,即触发心跳超时事件。两个0表示禁用写空闲和读写空闲。 ch.pipeline().addLast("idleStateH原创 2021-04-11 11:46:07 · 495 阅读 · 0 评论 -
Netty (7)-半包和粘包
由于网络传输等原因,原始发出的消息和收到的消息可能不一致。可能多条消息粘在一起变成一条,也可能一条消息分了几条。本篇介绍几种解决方案。LineBasedFrameDecoder换行符分隔netty预设了一个解码器LineBasedFrameDecoder,参数为消息最大长度。收到消息时,会检查其中的换行符,将每个换行符之间的内容作为一条消息,交给MyHandler处理,客户端发过来的消息中必须包含换行符。 ch.pipeline().addLast(new LineBasedF原创 2021-03-13 10:24:20 · 302 阅读 · 0 评论 -
Netty (6)-解码和编码
前面说过,netty中收到的消息是ByteBuf类型,需要先将其转换为String,才能做进一步处理。发出消息时则需要先将String转为ByteBuf。解码器和编码器就是专门用来处理这种转换的,收到消息时解码,发出消息时编码。启动配置修改netty启动代码,现在有三个自定义类,MyDecoderHandler会将收到的字节消息解码为String,交给MyHandler处理。而MyHandler发出String消息时,会被MyEncoder编码为字节后再发出。 ServerBootstra原创 2021-02-21 09:17:50 · 494 阅读 · 0 评论 -
Netty (5)-ChannelPipeline
每个连接channel都会创建一个ChannelPipeline,它将多个ChannelHandler组装起来,当收发消息时,按一定顺序和规则将消息传播给各个ChannelHandler进行处理。入站处理和出站处理ChannelHandler分入站(ChannelInboundHandler)和出站(ChannelOutboundHandler),收到消息做入站处理,发出消息做出站处理。假如在ChannelPipeline中按顺序放入5个ChannelHandler,第1、3、5是入站,收到消息时按原创 2021-01-23 17:52:31 · 422 阅读 · 2 评论 -
Netty (4)-内存回收和SimpleChannelInboundHandler
上一篇讲过,收发的数据都会先放入内存,并且这个内存还会是JVM以外的直接内存,所以需要我们手动去回收。原创 2020-06-19 15:24:59 · 1037 阅读 · 0 评论 -
Netty (3)-ByteBuf、池、直接内存、16进制
传统IO在收发数据时,会阻塞当前线程,一边接收数据,一边对数据进行处理,处理完一段数据再继续接收下一段,再处理。而NIO会一次性将接收的所有数据,放入内存,处理数据时只需要读取内存,而IO线程被完全释放,这就是非阻塞。而被放入内存的数据在 netty中的表现形式就是本篇要讲的ByteBuf接收数据继续延用修改第1篇的代码,以下就是一次性接收数据放入内存(ByteBuf),并且打印出来的过程...原创 2020-05-05 15:19:32 · 3267 阅读 · 3 评论 -
Netty (2)-ChannelInboundHandlerAdapter入站事件
在第1篇,我们继承ChannelInboundHandlerAdapter后,即可收到消息并处理。本篇介绍其更多的用法基本概念Channel:可以理解为一个连接,每一个客户端连到服务器,都会有一个与之对应的Channel。 ChannelHandler:用来处理Channel中的各种事件。 ChannelInboundHandlerAdapter:入站ChannelHandler,即从...原创 2020-01-12 12:05:50 · 5033 阅读 · 1 评论 -
Netty (1)-回声服务器
Netty基于java nio(非阻塞) 实现,主要用于服务端与客户端之间的socket通信,其高性能号称单机可支持百万连接。其应用场景非常广泛,如物联网、分布式、聊天程序、网络游戏等。在基于java语言的项目中,要开发socket通信,netty目前几乎处于不可替代的地位。本篇将用netty实现一个简单的回声通信。pom.xml <dependency> <...原创 2020-01-05 09:18:12 · 783 阅读 · 0 评论