随笔分类 - netty
摘要:ChannelOption.SO_LINGER参数对应于套接字选项中的SO_LINGER,Linux内核默认的处理方式是当用户调用close()方法的时候,函数返回,在可能的情况下,尽量发送数据,不一定保证会发送剩余的数据,造成了数据的不确定性,使用SO_LINGER可以阻塞close()的调用时间
阅读全文
摘要:ChannelOption.TCP_NODELAY参数对应于套接字选项中的TCP_NODELAY,该参数的使用与Nagle算法有关。 Nagle算法是将小的数据包组装为更大的帧然后进行发送,而不是输入一次发送一次,因此在数据包不足的时候会等待其他数据的到来,组装成大的数据包进行发送,虽然该算法有效提
阅读全文
摘要:当设置为true的时候,TCP会实现监控连接是否有效,当连接处于空闲状态的时候,超过了2个小时,本地的TCP实现会发送一个数据包给远程的 socket,如果远程没有发回响应,TCP会持续尝试11分钟,知道响应为止,如果在12分钟的时候还没响应,TCP尝试关闭socket连接。 keepalive不是
阅读全文
摘要:ChannelOption.SO_BACKLOG对应的是tcp/ip协议, listen函数 中的 backlog 参数,用来初始化服务端可连接队列。函数: // backlog 指定了内核为此套接口排队的最大连接个数; // 对于给定的监听套接口,内核要维护两个队列: 未连接队列和已连接队列 //
阅读全文
摘要:EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGruop = new NioEventLoopGroup(); option 主要负责设置 Boss 线程组, 而 childOption 对应的是 W
阅读全文
摘要:/** *获取报文长度 */public static String getNoDataRepXml(Object object) { String xml = ""; try { XStream xStream = new XStream(); ByteArrayOutputStream outp
阅读全文
摘要:1参数详解 1.1.1 new LengthFieldBasedFrameDecoder(Integer.MAX_VALUE, 0, 2) lengthFieldOffset = 0 lengthFieldLength = 2 lengthAdjustment = 0 initialBytesToS
阅读全文
摘要:解码器LengthFieldBasedFrameDecoder, 从名字上可以猜测出来, 它是基于长度的解码器.Netty从TCP缓冲区中读取字节, 把这些字节交给LengthFieldBasedFrameDecoder进行解码, 解码的操作是根据设定的规则, 根据规则, 从字节中解码出来有意义的数
阅读全文
摘要:前言 熟悉 Netty 的同学都知道,不能在 Netty 中做耗时的,不可预料的操作,比如数据库,网络请求,这将会严重影响 Netty 对 Socket 的处理速度。而解决方法就是将耗时任务添加到异步线程池中。但就添加线程池这步操作来讲,可以有2种方式,而且这2种方式的区别也蛮大的。今天就好好讲一讲
阅读全文
摘要:看官方说法,是一个能根据以往接受的消息进行计算,动态调整内存,利用CPU资源来换取内存资源,具体的实现策略如下:根据之前Channel接收到的数据包大小进行计算,如果连续填充满接收缓冲区的可写空间,则动态扩展容量。如果连续2次接收到的数据包都小于指定值,则收缩当前的容量,以节约内存。具体使用时,代码
阅读全文
摘要:先看channelRead方法,直接上源码 public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { boolean release = true; try { if (this.acceptI
阅读全文
摘要:项目中用了netty框架,自定义了解码器,由于没有结束符,导致了channelRead0一直不会执行。既然不会被动触发,那就需要主动触发。不过主动触发的是 channelRead,不是channelRead0,这点需要注意,netty提供的方法就是fireChannelRead 。有两种写法:1:c
阅读全文
摘要:我收到的应答报文: 00000827<?xml version="1.0" encoding="UTF-8"?><transaction> <header> <ver>1.0</ver> <msg> <rcvAppCd>UCP</rcvAppCd> <callTyp>SYN</callTyp> <m
阅读全文
摘要:XStream xStream = new XStream(); //由于对象默认开启安全防护,添加这条语句解决问题。尽量限制最低权限。 xStream.addPermission(AnyTypePermission.ANY); 下面这种方法可能也好使,但是目前没有尝试。 xStream.setup
阅读全文
摘要:写了一个netty服务端,从客户端发报文,第一次成功,当第二次在发送报文时报 解决办法,在handler加@Sharable
阅读全文
摘要:原因:解码器用错,客户端或服务端选择ByteBuf封装消息,但是ChannelInitializer继承类中使用了String的解码器,String不能转成ByteBuf,把消息解码成String抛出来了。解决方法:1.去掉解码器 2.客户端或服务端的消息不用ByteBuf封装,直接传String
阅读全文