
netty
非ban必选
黑,真他妈的黑
展开
-
springboot集成nettytcp和udp
【代码】springboot集成nettytcp和udp。原创 2024-12-25 19:18:08 · 449 阅读 · 0 评论 -
Netty自定义协议包长度
回复的包长度固定为 16 B , 起始位置 1+ 包类型1 + 包长度2 + DTU身份识别 11 + 结束标志 1 = 16 , 16进制则为 0X10;4、根据客户端发送的报文协议,使用 LengthFieldBasedFrameDecoder 解码器 SpliterDevice。包长度 = 起始位置 1 + 包类型 1 + 包长度 2 + DTU身份识别 11 + 数据长度 N + 结束标志 1;8、服务端向客户端发送消息 编码的实体类 MessageRespDevice。原创 2024-12-19 13:06:28 · 385 阅读 · 0 评论 -
Netty长度域解码器
与前两个示例不同的是,示例 3 的 Length 字段包含 Length 字段自身的固定长度以及 Content 字段所占用的字节数,Length 的值为 0x000E(2 + 12 = 14 字节),在 Length 字段值(14 字节)的基础上做 lengthAdjustment(-2)的修正,才能得到真实的 Content 字段长度。示例2.4中 Length 字段不再是报文的起始位置,Length 字段的值为 0x000C,表示 Content 字段占用 12 字节。原创 2024-12-18 23:01:32 · 975 阅读 · 0 评论 -
Netty的ByteBuf
2、SocketTool V4.exe 调试发送四字节16进制int数据。short 两字节。int 四字节。1、byte 一字节。原创 2024-12-13 16:05:07 · 242 阅读 · 0 评论 -
Netty粘包拆包事例
2.一种是多个字符串“粘”在了一起,我们定义这种ByteBuf为粘包。3.一种是一个字符串被“拆”开,形成一个破碎的包,我们定义这种。从服务端的控制台输出可以看出,存在3种类型的输出。3、运行客户端代码 ,服务端接收到的消息如下。1.一种是正常的字符串输出。ByteBuf为半包。1、server端代码。原创 2024-12-13 14:37:17 · 206 阅读 · 0 评论 -
Netty udp给指定客户端发消息
【代码】Netty udp给指定客户端发消息。原创 2023-12-21 17:54:06 · 1136 阅读 · 0 评论 -
Netty实现udp发送消息给指定客户端
4、udp服务端接收到消息处理逻辑。5、发送消息到指定udp客户端。1、客户端session。2、session工具类。3、udp服务端启动类。原创 2022-10-28 12:54:03 · 1846 阅读 · 0 评论 -
Nodejs直接使用proto文件
1、安装protobufjs2、helloworld.proto 实例3、js代码使用 helloworld.js控制台输出原创 2022-07-14 11:28:31 · 991 阅读 · 0 评论 -
Netty之protobuf服务端、nodejs客户端
1、java服务端参考代码Netty结合protobuf_非ban必选的博客-优快云博客protoc版本3.20.02、根据proto生成js文件参考proto文件生成js_非ban必选的博客-优快云博客_proto转js在proto文件所在目录执行3、nodejs代码 app.jsnodejs运行代码客户端结果如下 刚开始觉得这部分会非常的简单的,不就是将数据通过socket发过去么。刚开始就是这么直接弄的,后来发现出错。然后找了很久才知道netty需要将数据包装成定义好原创 2022-06-30 16:12:26 · 604 阅读 · 0 评论 -
proto文件生成js
1、安装nodejs和protobuf2、im.proto 文件内容如下syntax ="proto3"; //optimize_for 加快解析的速度option optimize_for = SPEED;option java_package = "sample.cluster.nettyim";option java_outer_classname="MessageData";//包路径package sample.cluster.nettyim;option java_原创 2021-04-23 16:19:01 · 2016 阅读 · 0 评论 -
Netty服务端和客户端protobuf协议
1、pom2、proto文件4、通过protoc生成java文件 SearchRequestOuterClass 5、服务端代码6、客户端代码原创 2022-06-29 14:09:00 · 236 阅读 · 0 评论 -
Netty之ChannelHandlerContext.writeAndFlush与channel.writeAndFlush的区别
1、ctx.writeAndFlush()方法的事件传播路径 ctx.writeAndFlush()方法从Pipeline链中的当前节点开始,往前找到第一个Outbound类型的Handler,把对象往前传播。如果这个对象确认不需要经过其他Outbound类型的Handler处理,那么就使用此方法。 2、ctx.channel().writeAndFlush()方法的事件传播路径 ctx.channel().writeAndFlush()方法从Pipeline链中的最原创 2022-06-28 14:17:32 · 2187 阅读 · 0 评论 -
netty自定义通讯协议校验魔数
1、参考之前的文章netty之服务端热插拔登录校验Handler_非ban必选的博客-优快云博客服务端和客户端编解码Handler修改如下PacketCodecHandler.java ,主要修改解码decode方法修改服务端和和客户端自定义编解码类 PacketCodec 的解码decode方法,注释 int magic = byteBuf.readInt();该行代码即可我们把客户端的魔数改成和服务端不一样,然后发消息给服务端,可以看到控制台输入如下 然后我们在把客户端的魔数改成和服原创 2022-06-24 16:12:23 · 685 阅读 · 0 评论 -
Netty实现同端口接收 TCP 和 WebSocket 连接
1、实现原理是基于websocket的连接握手协议是以GET /开头的,利用netty对handler的热插拔实现同一端口tcp和websocket双协议共存。实现代码如下server启动类协议选择类websocket消息接收处理类Websocket在线测试-Websocket接口测试-Websocket模拟请求工具...原创 2022-06-22 13:36:36 · 2025 阅读 · 0 评论 -
Netty之ByteBuf详解
ByteBuf的结构,如下图所示 1.ByteBuf是一个字节容器,容器里面的数据分为三部分,第一部分是已经丢弃的字节,这部分数据是无效的;第二部分是可读字节,这部分数据是ByteBuf的主体数据,从ByteBuf里读取的数据都来自这一部分;最后一部分的数据是可写字节,所有写到ByteBuf的数据都会写到这一段。后面的虚线部分表示该ByteBuf最多还能扩容多少容量。2.以上三部分内容是被两个指针划分出来的,从左到右依次是读指针(readerIndex)和写指(writerIndex)。还有一个变量capa原创 2022-06-14 11:09:18 · 2238 阅读 · 0 评论 -
Netty在 Redisson 中的应用
Redisson Github: GitHub - redisson/redisson: Redisson - Redis Java client with features of In-Memory Data Grid. Over 50 Redis based Java objects and services: Set, Multimap, SortedSet, Map, List, Queue, Deque, Semaphore, Lock, AtomicLong, Map Reduce, Pub原创 2022-06-14 10:23:12 · 461 阅读 · 0 评论 -
netty之服务端热插拔登录校验Handler
1、自定义通讯协议父类LengthFieldBasedFrameDecoder 编解码 2、消息类型定义3、java消息类序列化接口对应的序列化,本例只实现了阿里的fastjson序列化阿里fastjson序列化和反序列化实现登录请求消息登录响应消息心跳请求消息心跳响应消息单聊发送请求消息单聊接收响应消息消息编解码用户sessionsession保存和获取工具服务端空闲检测类服务端接收登录请求处理ha原创 2022-06-10 15:42:48 · 271 阅读 · 0 评论 -
netty之客户端定时发心跳数据包
服务端在一段时间内没有收到客户端的数据,这个现象产生的原因可以分为以下两种。1.连接假死。2.非假死状态下确实没有发送数据。我们只需要排除第二种可能,那么连接自然就是假死的。要排查第二种情况,我们可以在客户端定期发送数据包到服务端,通常这个数据包被称为心跳数据包。我们定义一个Handler,定期发送心跳数据包给服务端。客户端发送心跳数据给服务端 HeartBeatTimerHandler.java ctx.executor()方法返回的是当前Channel绑定的NIO线程。NIO线程有一个sc原创 2022-06-10 11:59:30 · 1814 阅读 · 1 评论 -
netty之服务端空闲检测
1、什么是空闲检测 对于服务端来说,客户端的连接如果出现假死,那么服务端将无法收到客户端的数据。也就是说,如果能一直收到客户端发来的数据,则说明这个连接还是活的。因此,服务端对于连接假死的应对策略就是空闲检测。 何为空闲检测?空闲检测指的是每隔一段时间,检测这段时间内是否有数据读写。简化一下,服务端只需要检测一段时间内,是否收到过客户端发来的数据即可,Netty自带的IdleStateHandler就可以实现这个功能。 首先,我们写一个继承自IdleStateH原创 2022-06-10 09:22:57 · 820 阅读 · 0 评论 -
netty之HashedWheelTimer
1、现有业务场景描述如下当某一事件发生时,连续通知相关人员三次,第一次及时通知,以后两次的通知每次间隔2秒。使用netty的定时器实现如下2、netty的HashedWheelTimer3、pom文件如下4、代码实现如下时间轮其实就是一种环形的数据结构,可以想象成时钟,分成很多格子,一个格子代码一段时间(这个时间越短,Timer的精度越高)。并用一个链表报错在该格子上的到期任务,同时一个指针随着时间一格一格转动,并执行相应格子中的到期任务。任务通过取摸决定放入那个格子。如下图所示:假设一个原创 2022-06-09 12:45:32 · 518 阅读 · 0 评论 -
wireshark抓取websocket包
1、2、原创 2022-05-18 17:25:20 · 7131 阅读 · 1 评论 -
Netty实现简单的websocketServer
1、pom文件 <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.75.Final</version> </dependency>2、只处理文本消息的NettyWebSocketHandle.原创 2022-05-18 14:22:42 · 645 阅读 · 0 评论 -
Netty之实现简单的httpserver
1、pom <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.75.Final</version> </dependency>2、SimpleHttpServerHandlerpac原创 2022-05-18 13:52:26 · 289 阅读 · 0 评论 -
Netty之MessageToMessageCodec
1、Netty内部提供了一个类,叫作MessageToMessageCodec,使用它可以将编解码操作放到一个类中去实现。首先定义一个PacketCodecHandler。PacketCodecHandler.javapackage the.flash.codec;import io.netty.buffer.ByteBuf;import io.netty.channel.ChannelHandler;import io.netty.channel.ChannelHandlerContex原创 2022-05-17 11:10:38 · 1016 阅读 · 0 评论 -
Netty之MessageToByteEncoder
Netty提供了一个特殊的ChannelHandler来专门处理编码逻辑,不需要每一次将响应写到对端的时候都调用一次编码逻辑进行编码,也不需要自行创建ByteBuf。这个类被叫作MessageToByteEncoder,从字面意思可以看出,它的功能就是将对象转换到二进制数据。使用MessageToByteEncoder来实现编码逻辑的过程如下。PacketEncoder继承自MessageToByteEncoder,泛型参数Packet表示这个类的作用是实现Packet类型对象到二进制.原创 2022-05-16 17:30:49 · 1278 阅读 · 0 评论 -
Netty之ByteToMessageDecoder和SimpleChannelInboundHandler
通常情况下,无论在客户端还是在服务端,当我们收到数据后,首先要做的就是把二进制数据转换到Java对象,所以Netty很贴心地提供了一个父类,来专门做这个事情。我们看一下如何使用这个类来实现服务端的解码。当继承了ByteToMessageDecoder这个类之后,只需要实现decode()方法即可。大家可以看到,这里的in传递进来的时候就已经是ByteBuf类型,所以不再需要强转。第三个参数是List类型,我们通过向这个List里面添加解码后的结果对象,就可以自动实现结果向下一个Handler传.原创 2022-05-16 17:22:46 · 720 阅读 · 0 评论 -
Netty之ChannelOutboundHandler的事件传播
1、关于ChannelOutboundHandler,我们用write()作例子,来体验一下Outbound事件的传播。我们继续在服务端的Pipeline添加3个ChannelOutboundHandlerpackage com.example.demo.http;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelIn原创 2022-05-16 16:57:23 · 175 阅读 · 0 评论 -
Netty之ChannelInboundHandler的传播机制
1、关于ChannelInboundHandler,我们用channelRead()作例子,来体验一下Inbound事件的传播。我们在服务端的Pipeline添加3个ChannelInboundHandlernetty Serverpackage com.example.demo.http;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.cha原创 2022-05-16 16:38:59 · 242 阅读 · 0 评论 -
Netty之Pipeline与ChannelHandler
1、Pipeline与ChannelHandler通过责任链设计模式来组织代码逻辑,并且能够支持逻辑的动态添加和删除,Netty能够支持各类协议的扩展,比如HTTP、Websocket和Redis,靠的就是Pipeline和ChannelHandler。2、无论从服务端来看,还是从客户端来看,在Netty的整个框架里面,一个连接对应着一个Channel。这个Channel的所有处理逻辑都在一个叫作ChannelPipeline的对象里,ChannelPipeline是双向链表结构,它和Channel之间原创 2022-05-16 16:32:52 · 240 阅读 · 0 评论 -
使用netty实现redis客户端连接
1、pom文件 <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.75.Final</version> </dependency>2、客户端处理实现RedisClientHand.原创 2022-05-12 15:42:33 · 958 阅读 · 0 评论 -
netty实现udp服务端和客户端
1、pom文件 <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.75.Final</version> </dependency>2、服务端实现UdpServerHandler..原创 2022-05-12 14:19:05 · 2106 阅读 · 0 评论 -
TCP/UDP压力测试工具
链接:https://pan.baidu.com/s/1AbF_gJ53wRALpXqaLY_1-g提取码:p4af原创 2022-05-10 11:30:21 · 1426 阅读 · 0 评论 -
SpringBoot和netty实现udp server
1、pom <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.75.Final</version> </dependency>2、serverpackage com.exa原创 2022-05-10 11:18:31 · 679 阅读 · 0 评论 -
protobuf插件安装使用
1、2、java实体类生成 proto文件进入到实体类,右键然后粘贴即可3、proto生成java类的插件proto数据类型映射pom文件 <!-- https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java --> <dependency> <groupId>com.googl...原创 2022-04-19 12:32:12 · 1136 阅读 · 0 评论 -
Byte数组和16进制字符串互转
package com.example.demo.im;public class ByteUtils { private static final char[] HEX_CHAR = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; /** * 方法四:byte[]-->hexString * * @param bytes *.原创 2022-04-18 14:14:42 · 1599 阅读 · 0 评论 -
Protostuff序列化和反序列化
pom <dependency> <groupId>io.protostuff</groupId> <artifactId>protostuff-core</artifactId> <version>1.8.0</version> </dependency> <dependency>原创 2022-04-16 22:34:49 · 167 阅读 · 0 评论 -
Netty学习之自定义协议
通信协议的设计如下图所示定义通信过程中的Java对象package com.example.demo.im;import lombok.Data;@Data//自定义通讯协议// 魔数(4字节)+版本号(1字节)+序列化算法(1字节)+指令(1字节)+数据长度(4字节)+数据(N字节)public abstract class Packet { /** * 协议版本 */ private Byte version = 3; /*原创 2022-04-16 22:05:49 · 958 阅读 · 0 评论 -
Netty之ByteBuf相关API
package com.example.demo.util;import io.netty.buffer.ByteBuf;import io.netty.buffer.ByteBufAllocator;public class ByteBufTest { public static void main(String[] args) { //初始容量9 最大容量100 ByteBuf buf = ByteBufAllocator.DEFAULT.buff.原创 2022-04-15 13:36:37 · 630 阅读 · 0 评论 -
Netty之ByteBuf读写字符串
1、pom <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.75.Final</version> </dependency>package com.example.demo.原创 2022-04-14 13:52:54 · 1174 阅读 · 0 评论 -
Netty之ByteBuff
<dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.75.Final</version> </dependency>package com.example.demo.util;...原创 2022-04-14 11:14:47 · 620 阅读 · 0 评论