netty
非ban必选
黑,真他妈的黑
展开
-
Netty udp给指定客户端发消息
【代码】Netty udp给指定客户端发消息。原创 2023-12-21 17:54:06 · 883 阅读 · 0 评论 -
Netty实现udp发送消息给指定客户端
4、udp服务端接收到消息处理逻辑。5、发送消息到指定udp客户端。1、客户端session。2、session工具类。3、udp服务端启动类。原创 2022-10-28 12:54:03 · 1724 阅读 · 0 评论 -
Nodejs直接使用proto文件
1、安装protobufjs2、helloworld.proto 实例3、js代码使用 helloworld.js控制台输出原创 2022-07-14 11:28:31 · 946 阅读 · 0 评论 -
Netty之protobuf服务端、nodejs客户端
1、java服务端参考代码Netty结合protobuf_非ban必选的博客-CSDN博客protoc版本3.20.02、根据proto生成js文件参考proto文件生成js_非ban必选的博客-CSDN博客_proto转js在proto文件所在目录执行3、nodejs代码 app.jsnodejs运行代码客户端结果如下 刚开始觉得这部分会非常的简单的,不就是将数据通过socket发过去么。刚开始就是这么直接弄的,后来发现出错。然后找了很久才知道netty需要将数据包装成定义好原创 2022-06-30 16:12:26 · 553 阅读 · 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 · 1906 阅读 · 0 评论 -
Netty服务端和客户端protobuf协议
1、pom2、proto文件4、通过protoc生成java文件 SearchRequestOuterClass 5、服务端代码6、客户端代码原创 2022-06-29 14:09:00 · 204 阅读 · 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 · 2036 阅读 · 0 评论 -
netty自定义通讯协议校验魔数
1、参考之前的文章netty之服务端热插拔登录校验Handler_非ban必选的博客-CSDN博客服务端和客户端编解码Handler修改如下PacketCodecHandler.java ,主要修改解码decode方法修改服务端和和客户端自定义编解码类 PacketCodec 的解码decode方法,注释 int magic = byteBuf.readInt();该行代码即可我们把客户端的魔数改成和服务端不一样,然后发消息给服务端,可以看到控制台输入如下 然后我们在把客户端的魔数改成和服原创 2022-06-24 16:12:23 · 640 阅读 · 0 评论 -
Netty实现同端口接收 TCP 和 WebSocket 连接
1、实现原理是基于websocket的连接握手协议是以GET /开头的,利用netty对handler的热插拔实现同一端口tcp和websocket双协议共存。实现代码如下server启动类协议选择类websocket消息接收处理类Websocket在线测试-Websocket接口测试-Websocket模拟请求工具...原创 2022-06-22 13:36:36 · 1919 阅读 · 0 评论 -
Netty之ByteBuf详解
ByteBuf的结构,如下图所示 1.ByteBuf是一个字节容器,容器里面的数据分为三部分,第一部分是已经丢弃的字节,这部分数据是无效的;第二部分是可读字节,这部分数据是ByteBuf的主体数据,从ByteBuf里读取的数据都来自这一部分;最后一部分的数据是可写字节,所有写到ByteBuf的数据都会写到这一段。后面的虚线部分表示该ByteBuf最多还能扩容多少容量。2.以上三部分内容是被两个指针划分出来的,从左到右依次是读指针(readerIndex)和写指(writerIndex)。还有一个变量capa原创 2022-06-14 11:09:18 · 2169 阅读 · 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 · 407 阅读 · 0 评论 -
netty之服务端热插拔登录校验Handler
1、自定义通讯协议父类LengthFieldBasedFrameDecoder 编解码 2、消息类型定义3、java消息类序列化接口对应的序列化,本例只实现了阿里的fastjson序列化阿里fastjson序列化和反序列化实现登录请求消息登录响应消息心跳请求消息心跳响应消息单聊发送请求消息单聊接收响应消息消息编解码用户sessionsession保存和获取工具服务端空闲检测类服务端接收登录请求处理ha原创 2022-06-10 15:42:48 · 235 阅读 · 0 评论 -
netty之客户端定时发心跳数据包
服务端在一段时间内没有收到客户端的数据,这个现象产生的原因可以分为以下两种。1.连接假死。2.非假死状态下确实没有发送数据。我们只需要排除第二种可能,那么连接自然就是假死的。要排查第二种情况,我们可以在客户端定期发送数据包到服务端,通常这个数据包被称为心跳数据包。我们定义一个Handler,定期发送心跳数据包给服务端。客户端发送心跳数据给服务端 HeartBeatTimerHandler.java ctx.executor()方法返回的是当前Channel绑定的NIO线程。NIO线程有一个sc原创 2022-06-10 11:59:30 · 1692 阅读 · 1 评论 -
netty之服务端空闲检测
1、什么是空闲检测 对于服务端来说,客户端的连接如果出现假死,那么服务端将无法收到客户端的数据。也就是说,如果能一直收到客户端发来的数据,则说明这个连接还是活的。因此,服务端对于连接假死的应对策略就是空闲检测。 何为空闲检测?空闲检测指的是每隔一段时间,检测这段时间内是否有数据读写。简化一下,服务端只需要检测一段时间内,是否收到过客户端发来的数据即可,Netty自带的IdleStateHandler就可以实现这个功能。 首先,我们写一个继承自IdleStateH原创 2022-06-10 09:22:57 · 767 阅读 · 0 评论 -
netty之HashedWheelTimer
1、现有业务场景描述如下当某一事件发生时,连续通知相关人员三次,第一次及时通知,以后两次的通知每次间隔2秒。使用netty的定时器实现如下2、netty的HashedWheelTimer3、pom文件如下4、代码实现如下时间轮其实就是一种环形的数据结构,可以想象成时钟,分成很多格子,一个格子代码一段时间(这个时间越短,Timer的精度越高)。并用一个链表报错在该格子上的到期任务,同时一个指针随着时间一格一格转动,并执行相应格子中的到期任务。任务通过取摸决定放入那个格子。如下图所示:假设一个原创 2022-06-09 12:45:32 · 479 阅读 · 0 评论 -
wireshark抓取websocket包
1、2、原创 2022-05-18 17:25:20 · 6915 阅读 · 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 · 603 阅读 · 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 · 267 阅读 · 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 · 968 阅读 · 0 评论 -
Netty之MessageToByteEncoder
Netty提供了一个特殊的ChannelHandler来专门处理编码逻辑,不需要每一次将响应写到对端的时候都调用一次编码逻辑进行编码,也不需要自行创建ByteBuf。这个类被叫作MessageToByteEncoder,从字面意思可以看出,它的功能就是将对象转换到二进制数据。使用MessageToByteEncoder来实现编码逻辑的过程如下。PacketEncoder继承自MessageToByteEncoder,泛型参数Packet表示这个类的作用是实现Packet类型对象到二进制.原创 2022-05-16 17:30:49 · 1238 阅读 · 0 评论 -
Netty之ByteToMessageDecoder和SimpleChannelInboundHandler
通常情况下,无论在客户端还是在服务端,当我们收到数据后,首先要做的就是把二进制数据转换到Java对象,所以Netty很贴心地提供了一个父类,来专门做这个事情。我们看一下如何使用这个类来实现服务端的解码。当继承了ByteToMessageDecoder这个类之后,只需要实现decode()方法即可。大家可以看到,这里的in传递进来的时候就已经是ByteBuf类型,所以不再需要强转。第三个参数是List类型,我们通过向这个List里面添加解码后的结果对象,就可以自动实现结果向下一个Handler传.原创 2022-05-16 17:22:46 · 647 阅读 · 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 · 154 阅读 · 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 · 224 阅读 · 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 · 216 阅读 · 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 · 914 阅读 · 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 · 2027 阅读 · 0 评论 -
TCP/UDP压力测试工具
链接:https://pan.baidu.com/s/1AbF_gJ53wRALpXqaLY_1-g提取码:p4af原创 2022-05-10 11:30:21 · 1297 阅读 · 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 · 643 阅读 · 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 · 1077 阅读 · 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 · 1396 阅读 · 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 · 137 阅读 · 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 · 929 阅读 · 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 · 608 阅读 · 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 · 1094 阅读 · 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 · 594 阅读 · 0 评论 -
Netty概述
Channel:是通道的意思。这是在JDK NIO类库里面提供的一个概念,JDK里面的通道是java.nio.channels.Channel,JDK中的实现类有客户端套接字通道java.nio.channels.SocketChannel和服务端监听套接字通道java.nio.channels.ServerSocketChannel。Channel的出现是为了支持异步IO操作。 io.netty.channel.Channel是Netty框架自己定义的一个通道接口。Netty实现的客户端NIO套接...原创 2020-11-17 09:11:05 · 128 阅读 · 0 评论 -
Netty 了解Memcached二进制协议
要实现 Memcached 的 GET,SET,和 DELETE 操作。我们只关注这些,但是在 memcached 协议中有一个通用的结构,只有少数参数改变为了改变一个请求或响应的意义。这意味着您可以轻松地扩展实现添加其他命令。一般协议有 24 字节头用于请求和响应。这个头可以分解如下表14.1中。Table 14.1 Sample Memcached header byte structureField Byte offset Value Magic 0 0x80 用于原创 2020-11-12 22:39:07 · 173 阅读 · 0 评论 -
Netty架构原理
netty server创建package com.cn.server;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelInitializer;import io.netty.channel.ChannelOption;import io.netty.channel.EventLoopGroup;import io.netty.channel.nio.NioEventLoopGroup;im原创 2020-11-12 20:54:02 · 122 阅读 · 0 评论 -
netty Ctx.close
For example, let us assume that we created the following pipeline: ChannelPipeline p = ...; p.addLast("1", new InboundHandlerA()); p.addLast("2", new InboundHandlerB()); p.addLast("3", new OutboundHandlerA()); p.addLast("4", new OutboundHandlerB());原创 2020-11-12 20:02:25 · 511 阅读 · 0 评论 -
netty服务端监听客户端连接加入和断开事件
package com.ahies.stm.app.gatenetty;import com.ahies.stm.app.centerControl.object.protocol.ControlProtocol;import com.ahies.stm.app.centerControl.object.service.ControlObjectService;import com.ahies.stm.app.synthesizes.appoint.service.AppointMemberSer.原创 2020-11-12 19:32:51 · 3180 阅读 · 0 评论