随笔分类 -  netty

netty学习
摘要:tomcat 异步线程模型大概可以理解为:acceptor负责接受新来的连接,然后把连接初始化后丢给poller来做io,然后又交给处理业务的exec线程池异步处理业务逻辑。 所以如果IO线程和handler 在一个线程里面,如果handler 执行某个逻辑比较耗时,比如查数据库、服务间通信等会严重 阅读全文
posted @ 2021-08-11 21:21 QiaoZhi 阅读(2251) 评论(0) 推荐(1) 编辑
摘要:RESP是Redis Serialization Protocol的简称,也就是专门为redis设计的一套序列化协议。这个协议比较简单,简单的说就是发送请求的时候按Redis 约定的数据格式进行发送,解析数据的时候按redis规定的响应数据格式进行相应。 无论是jedis还是lettuce, 最终发 阅读全文
posted @ 2021-08-11 21:19 QiaoZhi 阅读(359) 评论(0) 推荐(0) 编辑
摘要:1. NIOEventLoop 源码 EventLoopGroup bossGroup = new NioEventLoopGroup(1); 这里会创建一个group, 同时group 内部包含1个EventLoop 事件循环器 1. 类图继承关系 1. AbstractScheduledEven 阅读全文
posted @ 2021-08-04 21:55 QiaoZhi 阅读(306) 评论(0) 推荐(0) 编辑
摘要:1. ChannelPipeline、ChannelHandler、ChannelHandlerContext 的关系 1. 每创建一个Socket 就会分配一个全新的ChannelPipeline (简称pipeline) 2. 每一个 ChannelPipeline 内部包含多个 Channel 阅读全文
posted @ 2021-08-02 22:24 QiaoZhi 阅读(453) 评论(0) 推荐(0) 编辑
摘要:简单的分析下Netty的启动源码和接收请求的源码,以下面代码为例子: 1. 主启动类 /* * Copyright 2012 The Netty Project * * The Netty Project licenses this file to you under the Apache Lice 阅读全文
posted @ 2021-07-28 18:54 QiaoZhi 阅读(338) 评论(0) 推荐(1) 编辑
摘要:之前在学习NIO的时候只是简单的学习了其使用,对齐组件Selector、Channel、Buffer 也是只是有三个重要的类,至于为什么叫NIO以及NIO的优点没有了解,这里详细记录下。 1 . 简单组成 内核模式:跑内核程序。在内核模式下,代码具有对硬件的所有控制权限。可以执行所有CPU指令,可以 阅读全文
posted @ 2021-07-21 18:10 QiaoZhi 阅读(997) 评论(0) 推荐(0) 编辑
摘要:之前了解到dubbo 的底层是基于Netty,在学习了Netty 之后简单的模拟一个RPC。 模仿dubbo,消费者和提供者约定接口和协议,消费者远程调用提供者的服务,提供者返回一个字符串,消费者打印提供者返回的字符串 1. HelloService 公共接口 package netty.rpc.p 阅读全文
posted @ 2021-04-11 16:24 QiaoZhi 阅读(166) 评论(0) 推荐(0) 编辑
摘要:netty 发送或者接受一个消息的时候,将会发生一次数据转换。 入站消息会被解码,从字节转换为另一种格式,比如Java 对象; 如果是出站消息会被编码成字节码。 测试自己编写一个编码器和解码器。 1. MyLongToByteEncoder Long型转为byte的编码器: 实际上继承了Channe 阅读全文
posted @ 2021-04-11 16:04 QiaoZhi 阅读(353) 评论(0) 推荐(0) 编辑
摘要:1. 简介 1. TCP 是面向连接的,面向流的,提供可靠性服务,收发两端(客户端和服务器端) 都要有一一成对的Socket, 因此,发送端为了将多个发送给接收端的包更有效的发给对方,使用了优化算法(Nagle 算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包,这样虽然提高 阅读全文
posted @ 2021-04-07 21:05 QiaoZhi 阅读(922) 评论(0) 推荐(0) 编辑
摘要:1. 编码和解码的基本介绍 编写网络应用程序时,因为数据在网络中传输的都是二进制字节码数据,在发送数据时就需要编码,接收数据时就需要解码。codec(编解码器) 的组成部分有两个:decoder(解码器)和 encoder(编码器)。encoder 负责把业务数据转换成字节码数据,decoder 负 阅读全文
posted @ 2021-04-01 21:11 QiaoZhi 阅读(511) 评论(0) 推荐(0) 编辑
摘要:用netty 实现一个群聊,服务端接收客户端消息,并且转发给其他用户。无论是群聊还是单聊,都是由服务器端进行转发。 1. ChatServer package netty.chat; import io.netty.bootstrap.ServerBootstrap; import io.netty 阅读全文
posted @ 2021-03-31 19:42 QiaoZhi 阅读(403) 评论(0) 推荐(0) 编辑
摘要:Netty 提供一个专门用来操作缓冲区(即Netty的数据容器)的工具类:io.netty.buffer.Unpooled 之前简单用过,如下: /** * 通道就绪事件 * * @param ctx * @throws Exception */ @Override public void chan 阅读全文
posted @ 2021-03-30 22:10 QiaoZhi 阅读(2339) 评论(0) 推荐(0) 编辑
摘要:1. NioEventLoop 和 NioEventLoopGroup 1. NioEventLoop 表示一个不断循环的执行处理任务的线程。每个NioEventLoop都包含一个Selector,用于监听绑定在它上面的socket通讯。 每个Loop 都有一个线程池,进来的时候会用线程池处理请求。 阅读全文
posted @ 2021-03-30 22:06 QiaoZhi 阅读(110) 评论(0) 推荐(0) 编辑
摘要:使用Netty 实现一个简单的Http服务器,可以接受客户端的请求,并且实现拒绝请求一些请求,比如请求favicon.ico 网站图标的时候拒绝请求。 服务器收到客户端请求之后回传一个简单的消息: "hello, 我是服务器" 1. 代码 1. NettyHttpServerHandler 处理Ht 阅读全文
posted @ 2021-03-08 20:48 QiaoZhi 阅读(1116) 评论(0) 推荐(0) 编辑
摘要:1. 自定义任务 常见场景: (1) 用户程序自定义的普通任务 (2) 用户自定义定时任务 (3) 非当前Reactor线程调用Channel的各种方法(这种解决办法就是连接成功之后用一个集合将Channel维护起来,后面拿到做操作) 例如在推送系统的业务线程里面,根据用户的标识,找到对应的chan 阅读全文
posted @ 2021-03-04 22:45 QiaoZhi 阅读(600) 评论(1) 推荐(0) 编辑
摘要:简单的实现聊天,发送至服务器端之后由服务器转发给其他在线的用户。 1. pom <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:s 阅读全文
posted @ 2021-03-02 22:44 QiaoZhi 阅读(2772) 评论(0) 推荐(0) 编辑
摘要:简单编写一个案例实现: (1) 服务器端启动监听6666端口, 收到客户端信息之后打印下客户端信息且回传一段服务器端的信息 (2) 客户端启动之后连接到6666端口,且发送一段信息,收到服务器端信息之后打印下服务器发送的信息 1. 代码实现 0. pom <dependency> <groupId> 阅读全文
posted @ 2021-03-01 23:00 QiaoZhi 阅读(424) 评论(0) 推荐(0) 编辑
摘要:1. 原生NIO存在的问题 NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer 等。需要具备其他的额外技能:要熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,你 阅读全文
posted @ 2021-03-01 21:30 QiaoZhi 阅读(216) 评论(0) 推荐(0) 编辑
摘要:1. 理论 零拷贝是服务器网络编程的关键,任何性能优化都离不开。在 Java 程序员的世界,常用的零拷贝有 mmap(内存映射) 和 sendFile。所谓的零拷贝不是说不拷贝,是不存在CPU拷贝,DMA拷贝是不可避免的。也就是从操作系统的角度来说,内核缓存区之间没有数据是重复的(只有kernel 阅读全文
posted @ 2021-02-26 23:54 QiaoZhi 阅读(387) 评论(0) 推荐(0) 编辑
摘要:简单的编写一个群聊系统,实现的功能如下: 1. 实现服务器端和客户端的群聊系统,实现非阻塞方式的数据简单通讯 2. 实现多人聊天 3. 服务器端可以实现感应到用户上线、离线,并实现消息转发 4. 客户端:通过channel可以无阻塞发送消息给其他用户,同时可以接受其他用户发送的消息(由服务器转发得到 阅读全文
posted @ 2021-02-26 16:57 QiaoZhi 阅读(228) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示