1.水文遥测站、中心站
水文遥测终端|遥测终端机RTU|遥测数传仪|中小河流水文自动监测设备|水雨情自动测报设备-平升电子
2.netty解析半包粘包文章
Netty源码,详解Http协议的数据包解码过程_netty httppostrequestdecoder.offer-优快云博客
3.netty中http解析失败丢弃内容
io.netty.handler.codec.http.HttpObjectDecoder
4.netty中解决半包的思路
参考代码片段
io.netty.handler.codec.DelimiterBasedFrameDecoder#decode(io.netty.channel.ChannelHandlerContext, io.netty.buffer.ByteBuf)
先用indexof()方法找到结束符,indexof()类似预处理,先不读取数据,找到下一个结束符,在读取到下一个结束符的位置。
未处理的包(ByteBuf)不能先读取,因为最后未读完的包(ByteBuf)要缓存起来,供下一次接收包合并包。代码里如果先读取ByteBuf后,下一次就无法合并了,所以要先预处理看能读到哪里。合并处理粘包问题在父类ByteToMessageDecoder中已经处理了。
如果在encode方法中监测到半包,什么都不做,直接返回就可以了。因为encode方法中入参的ByteBuf已经在ByteToMessageDecoder缓存起来了。
类似HttpObjectDecoder中遇到半包问题也是类似的处理方式。
HttpObjectDecoder处理消息头的片段
从红框中看出没找到换行符的情况下,就直接返回了。
当然,不会一直这样半包合并下去,可能会碰到恶意报文。这样就要设置一些报文最大长度的参数。超出限制就报异常。
处理异常可以选择丢弃当前报文和缓存。HttpObjectDecoder就调用了
buffer.skipBytes(buffer.readableBytes())方法丢弃当前buffer缓存。并发送给客户端错误信息。
注释说明当读取不完整的frame时,不要改变readIdx
5.mysql设置包最大值
set global max_allowed_packet = 100*1024*1024;
show VARIABLES like '%max_allowed_packet%';
6.MySQL参数log_bin_trust_function_creators介绍
set global log_bin_trust_function_creators=TRUE;
7.指令周期
https://blog.51cto.com/heliotopekxy/6344027