![](https://img-blog.csdnimg.cn/direct/e3d484e5487d4eeebf65c3ca3e8a1172.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Netty
文章平均质量分 84
学习netty
五敷有你
稳中求进,多平安
展开
-
【Netty】Future & Promise
首先要说明 netty 中的 Future 与 jdk 中的 Future 同名,但是是两个接口,netty 的 Future 继承自 jdk 的 Future,而 Promise 又对 netty Future 进行了扩展。netty Promise 不仅有 netty Future 的功能,而且脱离了任务独立存在,只作为两个线程间传递结果的容器。netty Future 可以同步等待任务结束得到结果,也可以异步方式得到结果,但都是要等任务结束。同步处理任务失败 - await。await 死锁检查。原创 2024-06-23 18:19:10 · 1019 阅读 · 13 评论 -
【Netty】Channel
channel 的主要作用close() 可以用来关闭 channelcloseFuture() 用来处理 channel 的关闭sync 方法作用是同步等待 channel 关闭而 addListener 方法是异步等待 channel 关闭pipeline() 方法添加处理器write() 方法将数据写入writeAndFlush() 方法将数据写入并刷出。原创 2024-06-23 16:40:28 · 255 阅读 · 1 评论 -
【Netty】EventLoop组件
EventLoopGroup 是一组 EventLoop,Channel 一般会调用 EventLoopGroup 的 register 方法来绑定其中一个 EventLoop,后续这个 Channel 上的 io 事件都由此 EventLoop 来处理(保证了 io 事件处理时的线程安全)到关闭状态从而拒绝新的任务的加入,然后在任务队列的任务都处理完成后,停止线程的运行。客户端,启动三次,分别修改发送字符串为 zhangsan(第一次),lisi(第二次),wangwu(第三次)它的继承关系比较复杂。原创 2024-06-22 22:09:14 · 205 阅读 · 4 评论 -
第一个Netty程序
netty第一个程序原创 2024-06-20 21:53:10 · 856 阅读 · 2 评论 -
【Netty】nio处理accept&read&write事件
TLV 格式,即 Type 类型、Length 长度、Value 数据,类型和长度已知的情况下,就可以方便获取消息大小,分配合适的 buffer,缺点是 buffer 需要提前分配,如果内容过大,则影响 server 吞吐量。一种思路是首先分配一个较小的 buffer,例如 4k,如果发现数据不够,再分配 8k 的 buffer,将 4k buffer 内容拷贝至 8k buffer,优点是消息连续容易处理,缺点是数据拷贝耗费性能。如果不取消,会每次可写均会触发 write 事件。原创 2024-06-18 09:01:24 · 1677 阅读 · 49 评论 -
【Netty】nio阻塞&非阻塞&Selector
可以采用线程池技术来减少线程数和线程上下文切换,但治标不治本,如果有很多连接建立,但长时间 inactive,会阻塞线程池中所有线程,因此不适合长连接,只适合短连接。32 位 jvm 一个线程 320k,64 位 jvm 一个线程 1024k,如果连接数过多,必然导致 OOM,并且线程太多,反而会因为频繁上下文切换导致性能降低。客户端发送数据过来,客户端正常、异常关闭时,都会触发 read 事件,另外如果发送的数据大于 buffer 缓冲区,会触发多次读取事件。原创 2024-06-17 15:53:43 · 844 阅读 · 3 评论 -
FileChannel的使用
channel 必须关闭,不过调用了 FileInputStream、FileOutputStream 或者 RandomAccessFile 的 close 方法会间接地调用 channel 的 close 方法。在 while 中调用 channel.write 是因为 write 方法并不能保证一次将 buffer 中的内容全部写入 channel。这时写入,会追加内容,但要注意如果 position 超过了文件末尾,再写入时在新内容和原末尾之间会有空洞(00)设置当前位置时,如果设置为文件的末尾。原创 2024-06-16 20:33:06 · 400 阅读 · 4 评论 -
【Netty】ByteBuffer原理与使用
Buffer则用来缓冲读写数据,常见的buffer有:ByteBufferhortBufferIntBufferLongBufferCharBuffer使用fileChannel读取文件内容输出10:39:03 [DEBUG] [main] c.i.n.ChannelDemo1 - 读到字节数:1010:39:03 [DEBUG] [main] c.i.n.ChannelDemo1 - 读到字节数:4。原创 2024-06-16 20:14:46 · 1014 阅读 · 1 评论