websocket协议开发
摘要:首先是服务端启动类: @Slf4j public class WebSocketServer { private static final int port = 8888; public void run() { NioEventLoopGroup boss = new NioEventLoopGr
阅读全文
posted @
2022-04-16 19:24
溪水静幽
阅读(88)
推荐(0) 编辑
protobuf 3
摘要:Protobuf3是类似json,xml的数据交换协议,但是传输的数据更小,传输的速度更快; 跨语言交互,支持大部分主流编程语言。protobuf是一种数据交换的格式,以二进制的格式进行数据交换, 主要用于网络传输、配置文件、数据存储等诸多领域。 idea中编译protobuf 首先,下载安装Pro
阅读全文
posted @
2022-04-14 11:53
溪水静幽
阅读(265)
推荐(0) 编辑
启动流程
摘要:服务端启动流程概览: 创建 ServerBootStrap启动类 设置并绑定 NioEventLoopGroup线程池 创建服务端 Channel 添加并设置 ChannelHandler 绑定并启动监听端口 Channel的创建和初始化过程 Netty服务端的Channel类型是 NioServe
阅读全文
posted @
2022-04-02 19:39
溪水静幽
阅读(47)
推荐(0) 编辑
SO_BACKLOG
摘要:该参数是 ServerSocketChannel 的参数 三次握手与连接队列 第一次握手时,因为客户端与服务器之间的连接还未完全建立,连接会被放入半连接队列中 当完成三次握手以后,连接会被放入全连接队列中 服务器处理Accept事件是在TCP三次握手,也就是建立连接之后。服务器会从全连接队列中获取连
阅读全文
posted @
2022-03-26 19:05
溪水静幽
阅读(2851)
推荐(2) 编辑
CONNECT_TIMEOUT_MILLIS参数
摘要:属于 SocketChannal 的参数 用在客户端建立连接时,如果在指定毫秒内无法连接,会抛出 timeout 异常 注意:Netty 中不要用成了SO_TIMEOUT 主要用在阻塞 IO,而 Netty 是非阻塞 IO public class TestParam { public static
阅读全文
posted @
2022-03-26 17:12
溪水静幽
阅读(1198)
推荐(0) 编辑
Channel
摘要:Channel 的常用方法 close() 可以用来关闭Channel closeFuture() 用来处理 Channel 的关闭 sync 方法作用是同步等待 Channel 关闭 addListener 方法是异步等待 Channel 关闭 pipeline() 方法用于添加处理器 write
阅读全文
posted @
2022-02-20 22:46
溪水静幽
阅读(1113)
推荐(0) 编辑
EventLoop
摘要:EventLoop 本质是一个单线程执行器(同时维护了一个 Selector),里面有 run 方法处理一个或多个 Channel 上源源不断的 io 事件 继承关系如下 继承自 j.u.c.ScheduledExecutorService 因此包含了线程池中所有的方法 继承自 netty 自己的
阅读全文
posted @
2022-02-20 21:48
溪水静幽
阅读(114)
推荐(0) 编辑
ByteBuf
摘要:二进制数据抽象ByteBuf是字节容器,容器里面的的数据分为三个部分,第一个部分是已经丢弃的字节,这部分数据是无效的; 第二部分是可读字节,这部分数据是ByteBuf的主体数据,从ByteBuf里面读取的数据都来自这一部分;最后一部分的数据是可写字节,所有写到 ByteBuf的数据都会写到这一段.
阅读全文
posted @
2022-02-20 18:37
溪水静幽
阅读(468)
推荐(0) 编辑
自定义协议
摘要:组成要素 魔数:用来在第一时间判定接收的数据是否为无效数据包 版本号:可以支持协议的升级 序列化算法:消息正文到底采用哪种序列化反序列化方式,如:json、protobuf、hessian、jdk 指令类型:是登录、注册、单聊、群聊… 跟业务相关 请求序号:为了双工通信,提供异步能力 正文长度 消息
阅读全文
posted @
2021-09-11 18:00
溪水静幽
阅读(333)
推荐(0) 编辑
Netty拆粘包问题
摘要:TCP 协议传输的过程: 发送端的字节流都会先传入缓冲区,再通过网络传入到接收端的缓冲区中,最终由接收端获取。发送两个完整包到接收端的时候: 以下情况: 由发送的两个报文组成的,对于应用程序来说就很难处理了(这样称为粘包)。原因: 应用层:接收方 ByteBuf 设置太大(Netty 默认 1024
阅读全文
posted @
2019-12-19 22:35
溪水静幽
阅读(143)
推荐(0) 编辑
结合zk实现简易的RPC框架
摘要:一个RPC框架需要重点关注哪几个点: 代理 (动态代理) 通讯协议 序列化 网络传输 基于Netty实现RPC 1、需要确定通信双方的协议格式,请求对象和响应对象,请求对象的ID是客户端用来验证服务器请求和响应是否匹配 @Data @ToString public class RpcRequest
阅读全文
posted @
2019-12-18 22:39
溪水静幽
阅读(234)
推荐(0) 编辑
springboot整合netty实战
摘要:1、依赖 <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.22.Final</version> </dependency> <dependency> <groupId>c
阅读全文
posted @
2019-12-15 23:23
溪水静幽
阅读(2517)
推荐(0) 编辑
构建HTTP(HTTPS)应用程序
摘要:为了支持 SSL/TLS,Java提供javax.net.ssl 包,它的 SSLContext 和 SSLEngine 类使得解密和加密相当简单和高效。SSLContext是SSL链接的上下文,SSLEngine主要用于出站和入站字节流的操作。 Netty还提供了使用 OpenSSL工具包的SSL
阅读全文
posted @
2019-12-01 20:36
溪水静幽
阅读(345)
推荐(0) 编辑
netty实战
摘要:Netty是一款异步的事件驱动的网络应用程序框架,支持快速开发可维护的高性能的面向协议的服务器和客户端。 1、pom依赖 <!-- https://mvnrepository.com/artifact/io.netty/netty-all --> <dependency> <groupId>io.n
阅读全文
posted @
2019-11-28 22:52
溪水静幽
阅读(412)
推荐(0) 编辑
Netty核心组件
摘要:Netty中的Reactor模型主要由多路复用器(Acceptor)、事件分发器(Dispatcher)、事件处理器(Handler)组成,可以分为三种. 单线程模型:所有I/O操作都由一个线程完成,即多路复用、事件分发和处理都是在一个Reactor线程上完成的。 对于一些小容量应用场景,可以使用单
阅读全文
posted @
2019-11-27 23:20
溪水静幽
阅读(177)
推荐(0) 编辑