![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Netty
将netty开发过程中点点滴滴做下记录
优惠券已抵扣
余额抵扣
还需支付
¥9.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
黎仔656
正见、正思维、正语、正业、正命、正精进、正念、正定
展开
-
【Netty】代码分析1
1、EchoServerHandlerpackage com.zhang.nettytest2.demo3;import io.netty.buffer.ByteBuf;import io.netty.buffer.Unpooled;import io.netty.channel.ChannelFutureListener;import io.netty.channel.ChannelHandler;import io.netty.channel.ChannelHandlerContext原创 2020-08-04 11:31:33 · 161 阅读 · 0 评论 -
【Netty】关于发送消息后如何实现等待回复
背景:需要在服务端下发了消息后,等待这个消息回复,再执行下一步。如何实现?原创 2020-07-23 11:03:07 · 3864 阅读 · 3 评论 -
【Netty】4、谈谈SelectionKey
原谅我先把源码放上来,再细品。。。。/* * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * */package java.nio.channels;import java.util.concurrent.atomic.AtomicRefe原创 2020-07-10 16:38:09 · 403 阅读 · 0 评论 -
从一个客户端连接说起Netty通信过程
我觉得,当我能够把一个客户端从联网到与服务器端通信过程说的清清楚楚的时候,我对Netty的理解能更进一步(当然,描述的过程不掺杂百度谷歌的成分。)学任何东西应该也是一样的道理,能把各种的来龙去脉说得清清楚楚,那肯定是一定程度地掌握这个东西。 今天也就开始一步一步写。如果有朋友有什么补充,我这写得不对的地方也请指正,谢谢。 20200710 说起客户端连接服务器的通信过程,我们只拿TCP/IP协议来说,当然客户端连接服务器可以有多种协议形式(包括htt...原创 2020-07-10 13:56:28 · 220 阅读 · 0 评论 -
【Netty】关于心跳机制的实现
使用背景:很多设备联网过程中都会有个设备状态,比如空闲、使用中、离线等,而这些状态的更新,依靠的是心跳机制来完成。参考以下链接https://www.cnblogs.com/demingblog/p/9957143.html今天实现了整理这部分的内容。...原创 2020-07-06 16:11:24 · 594 阅读 · 0 评论 -
【Netty】2、Netty权威指南中关于linux网络I/O模型
根据unix网络编程对I/O模型的分类,有5中I/O模型:1、阻塞I/O模型:阻塞意思是进程在从调用recvfrom开始到它返回的整段时间内都是被阻塞,其他进程不可打断;2、非阻塞I/O模型:recevfrom从应用层到内核的时候,如果缓冲区没有数据的话,直接返回一个EWOULDLOCK错误,一般都对非阻塞I/O模型进行轮训检查这个状态,看内核是不是有数据到来。3、I/O复用模型:...原创 2019-11-22 22:53:53 · 155 阅读 · 0 评论 -
【Netty】1、理解清楚什么是同步、异步、阻塞、非阻塞
我记得接触这些词语是在学操作系统的时候。当时记得最清楚的就是,在讲到通信时,同步才是异步,异步才是同步。同步:发送方发送请求后,需要等待接收响应,否则将一直等待异步:发送方发送请求后,不需要等待响应,可以继续发送下一个请求,或者主动挂起线程并释放CPU阻塞:IO 调用会一直阻塞,直至结果返回才能继续执行非阻塞:IO 调用会立即返回,不需要等待结果,并可以执行下一个 IO 调用...原创 2019-11-27 21:54:23 · 397 阅读 · 0 评论 -
Netty长连接过程中如何判断在线和离线状态
话题背景: 在实际的开发过程中,TCP长连接对于我们的服务程序来说需要同时满足两个条件,1个是TCP保持连接,另外一个最关键是有通信数据。 在开发过程中可能会遇到以下几种问题: 1、TCP连接了, 但客户端没有实际数据通信; 2、TCP连接了,但服务器端没有实际数据通信; 3、TCP连接了,客户端前期发送数据,但后期长时间没有发送数据; 4、TCP连接后,数据通信一段时间后,客户端突然断电; 5、TCP发送后,服务器端...原创 2020-06-24 10:13:15 · 5354 阅读 · 12 评论 -
关于Netty开发过程中遇到的问题整理
今天也偷个空,把从netty入门到目前所遇到的问题,包括在书上遇到的问题做个整理,后期再逐个自答。1、NIO框架有哪些?各有什么特点?2、常见的IO模型有哪些?(大致有5个)并说说IO模型执行的过程。3、如何理解阻塞、非阻塞、异步、同步?4、线程池的机制是什么?5、一般一台服务器可以连接多少设备是根据什么决定的?6、缓冲区是什么?和内存有什么区别?7、多路复用器的机制是什么?8、发现现在能静下心来读书的时间不多,还要靠朋友们一起努力,互相支持,互相学习。...原创 2020-06-23 10:49:04 · 434 阅读 · 0 评论 -
关于Netty这个专栏
前段时间看到csdn有设置付费专栏的,所以也就斗胆试了一下,到目前应该收到两个朋友的付费,首先感谢这两位朋友。但有几点我想说明下:1、确实文章里所写的可能是我在开发过程中遇到的问题还有总结。文章写得比较粗糙,还不够系统化;2、开这个专栏的想法是能吸引更多想学Netty的朋友一起讨论,遇到问题能一起解决;3、得到朋友们的支持,我会尽量多读点书,多敲点代码,和大家分享,如果有需要,可以联系一起解决。当然,如果有写得不对的地方,也请各位朋友拍砖,我也会努力改进,谢谢。...原创 2020-06-23 09:34:54 · 213 阅读 · 0 评论 -
使用Netty处理多协议的方式
背景:服务器需要支持多种协议的解析,如何解决呢?一开始以为可以通过netty的解码器,然后根据不同的协议格式来解析判断究竟是什么版本的协议?哪家的协议?但想起来这个逻辑估计会很难完成,而且后期维护和更新会显得复杂,所以想了另外一个办法:不同协议使用不同的端口,比如A协议使用1100端口,B协议使用2200端口,这样就有独立的解编码器,后期维护更新就比较方便。在这里写贴上部分代码,后期再细化这个思路:public class TCPServer implements Runnable { p原创 2020-06-16 10:46:14 · 2740 阅读 · 4 评论 -
Netty的inbound和outbound事件传播过程
参考https://www.jianshu.com/p/772f14930f83,这里对于文章里的ctx.fireChannelRead(msg); 从头节点HeadContext开始传播ctx.pipeline().fireChannelRead(msg);从当前节点往下传播事件至今不清楚ctx.pipeline().fireChannelRead(msg) 是如何用的...原创 2020-03-26 14:43:44 · 1661 阅读 · 1 评论 -
Netty接收报文长度问题
对于netty的接收数据字节长度,之前资料上是写着最大1024字节,但是否有设置参数可以支持单条报文接收大于1024字节,还不清楚;查了下可以设置:option(ChannelOption.SO_RCVBUF,1024*16).//设置接收缓冲区option(ChannelOption.SO_SNDBUF,1024*16);//设置发送缓冲区但实际上运行时出现:14:19:3...原创 2020-03-09 14:27:35 · 8742 阅读 · 0 评论 -
Netty接收报文打印问题
需求:Netty服务器端接收到报文后,需要显示接收到的完整原始数据包,比如客户端发送了0x31,那服务器端也显示0x31,而不是转换格式后的数据。一开始用例程的方法:System.out.println("服务器收到数据2:"+in.toString(CharsetUtil.UTF_8));其中,in是服务器端接收到的数据,格式是bytebuf。通过这种方式,客户端发送0x31...原创 2020-03-09 14:49:20 · 1811 阅读 · 0 评论 -
【学习IntelliJ IDEA】10、Netty搭建之功能列表
我觉得作为一个TCP 服务器端软件,最关键要做到以下:1、稳定性:能满足长期运行;2、抗干扰:不会因为一个错误而导致停止运行。在这里罗列下目前我能想到的该软件的功能需求要点,在11月29日到12月6日之间完成:1、单机满足50万连接数。(目前这只是个虚数,如何来测试,如何来满足这个数,还有待进一步了解)2、因为有多台设备连接,所以需要细分日志,主要分两大类:设备类和系统类,设备...原创 2019-11-28 22:51:17 · 136 阅读 · 0 评论 -
【学习IntelliJ IDEA】11、Netty搭建之起步
凭着看了几个教学视频、看了几个博文,又翻了几页书,就开始这个项目了,因为留给时间不多了。开篇先把一些问题罗列下:1、语法基础没有系统复习——但可以凭着以前其他语言的基础,还有边做边学巩固下;2、对于网络编程,也只是了解基础,也需要巩固;3、linux基础也比较差。了解以上实情,关键是为了提醒自己抓紧写代码,有问题尽快解决。跟着教学视频做了一个demo,又加了log4j,支持...原创 2019-11-29 09:48:16 · 307 阅读 · 2 评论 -
【学习IntelliJ IDEA】15、Netty搭建之第五天
https://blog.csdn.net/yinbucheng/article/details/77053692关于自定义协议方面的解码编码处理,参考了以上链接,迟点整理。原创 2020-01-02 01:52:45 · 150 阅读 · 0 评论 -
【学习IntelliJ IDEA】16、Netty搭建之第六天
感觉整理得有点乱,今天把这个服务端的程序理清下思路:1、客户端根据服务器端IP和端口号进行连接;2、客户端发送报文;3、服务器端根据报文格式判断什么协议版本;4、保存客户端信息;5、服务器端对指定客户端下发信息;...原创 2020-01-06 15:27:42 · 141 阅读 · 0 评论 -
Netty的边缘触发和水平触发
在一个教学视频中提到netty的边缘触发和水平触发,不懂,找了篇文章看下,迟点再整理下所得。https://www.jianshu.com/p/d066e62ea9f6原创 2020-03-16 13:56:10 · 811 阅读 · 0 评论 -
Netty之channelhandler和channelpipeline的几点理解
从目前来看,channelpipeline和channelhandler是一起来理解的。对我来说,channelpipeline就类似于一个容器,这个容器里存放的就是channelhandler。那首先来讲下channelhandler吧。它包含两个子接口:channelinboundhandler和channeloutboundhandler,分别处理进站和出站的事务。而channeli...原创 2020-03-22 18:33:44 · 379 阅读 · 0 评论 -
【学习IntelliJ IDEA】6、idea下创建netty项目
首先感谢https://blog.csdn.net/chen_xi_hao/article/details/79431756这个文章的作者。对于tcp server的开发还算有点基础,但是因为是刚接触idea和netty,所以不熟悉,所以先搭个大概内容出来,一步一步做。下面分几部分来进行吧。一、Netty是啥Netty是一款用于快速开发高性能的网络应用程序的Java框架。它封装了...原创 2019-11-23 09:50:39 · 836 阅读 · 0 评论 -
【学习IntelliJ IDEA】12、Netty搭建之第二天
今天定个计划,先解决以下问题:1、如何在netty工程中添加数据库连接;2、如何确定唯一的TCP连接,并且将每次连接进行记录;3、如何设置最大连接数;4、如何在工程中添加协议解析内容;5、如何在idea上进行代码上传,加到其他工程中?从书中了解,如果使用更少的线程处理多个TCP连接,可以减少内存管理和上下文切换所带来的开销,是更好。上下文切换?一个线程最多可以...原创 2019-11-30 09:40:42 · 186 阅读 · 0 评论 -
【学习IntelliJ IDEA】13、Netty搭建之第三天
这第三天和第二天隔的时间太长了。今天先说说echo服务。一开始看论坛上说的echo服务,不知道是啥。百度了下echo,意思是:所以从这里理解的echo服务既是,一个tcp服务器里,实现客户端发送什么,服务端即回应什么。那这个功能可以用来做什么?用于调试和检测目前所搭框架的并发性。这里我跟着视频敲了下代码,主要有两个,一个是EchoServer,import ...原创 2019-12-19 11:44:38 · 146 阅读 · 0 评论 -
【学习IntelliJ IDEA】14、Netty搭建之第四天
这笔记整理得很乱,抱歉抱歉,尽量写好些吧。后面再继续整理下。最近的netty工程,遇到几个问题先记下来:1、服务端如何表示每一个链路,然后当业务需要时,如何找到这个链路下发指令进行通信?参考https://segmentfault.com/q/1010000005112923/a-1020000016928422,总结下做法就是:每次接受客户端连接时把这些客户端的id记下来,然后服务...原创 2019-12-31 09:12:01 · 172 阅读 · 0 评论 -
Netty阶段性总结
1、在NIO里面,一个客户端连接就等同一个SocketChannel,pipeline:管道;2、NioEventLoop3、默认情况下,netty服务器端起多少线程?何时启动?4、netty如何解决jdk空轮询bug5、netty如何保证异步串行无锁化。...原创 2020-01-09 11:00:40 · 125 阅读 · 0 评论 -
【Netty】3、主要构件块(核心组件)
1、Channel2、回调3、Future4、事件和ChannelHandler1、Channel是看作是传入或传出数据的载体,它可以被打开或者关闭;2、回调:一个指向已经被提供给另一个方法的方法的引用;3、Future:提供了另一种在操作完成时通知应用程序的方式;4、事件和ChannelHandler:使用不同的事件来通知我们状态的改变或操作的状态;...原创 2020-02-28 14:27:30 · 206 阅读 · 0 评论 -
Netty之自定义协议解析及数据库操作
用netty写服务端的程序,主要在协议解析和数据库操作部分比较纠结,应该放在哪里进行处理?原创 2020-03-16 11:00:19 · 1033 阅读 · 3 评论 -
Netty之ByteBuf应用
对于ByteBuf的应用,首先我的理解是:1、服务端和客户端的tcp通信链路中的数据格式就是ByteBuf;2、在解析通信报文中,对于ByteBuf的api的熟悉,有助于我们熟练地取报文中指定的内容进行解析。解析过程中有可能会遇到以下需要处理:1、根据协议内容进行 解析;2、根据报文格式进行分析,跳转不同协议...原创 2020-03-17 14:29:30 · 691 阅读 · 0 评论 -
Netty处理比较耗时的事务应该放在哪里
参考https://www.zhihu.com/question/35487154待续。原创 2020-03-23 16:37:32 · 230 阅读 · 0 评论 -
Netty相关文章资料的整理
在网上看了好多Netty相关的资料,在这里整理下,以便后期回顾:1、私有协议的处理相关:https://www.cnblogs.com/wuxun1997/p/11655537.html在此也感谢这些博客文章的作者,是你们的文章帮助我一步一步学习和理解Netty。...原创 2020-03-24 14:30:16 · 161 阅读 · 0 评论 -
Netty之ServerBootstrap的handler和childhandler的区别
服务端还是客户端都进行了handler的设置,通过添加hanlder,我们可以监听Channel的各种动作以及状态的改变,包括连接,绑定,接收消息等。在基类AbstractBootstrap有handler方法,目的是添加一个handler,监听Bootstrap的动作,客户端的Bootstrap中,继承了这一点。在服务端的ServerBootstrap中增加了一个方法childHandl...原创 2020-03-30 13:02:27 · 4249 阅读 · 1 评论 -
Netty的几种解码器
LineBasedFrameDecoder 使用行尾控制字符(\n或者\r\n)作为分隔符来解析数据DelimiterBasedFrameDecoder 使用自定义的特殊字符作为消息的分隔符。FixedLengthFrameDecoder 固定长度LengthFieldBasedFrameDecoder 长度域解码器具体使用方法待续。。。。...原创 2020-03-31 16:42:44 · 773 阅读 · 0 评论 -
Netty-关于自定义协议开发的一些总结和整理
一、如何实现服务端框架对于服务端来说,要解决的问题有:1、如何实现更多的设备接入和通信;2、对于接受的连接是采用什么方式?异步、同步、阻塞还是费阻塞;3、如何使这个程序更健壮,保证长期运行?4、关于多线程的问题;二、关于编码器和解码器问题三、关于通信协议1、通信过程,就是把接受到的客户端的报文(二进制流)转化成对象,然后将收到的对象进行业务逻辑处理后,将反馈的对象转...原创 2020-04-06 16:45:17 · 214 阅读 · 0 评论 -
Netty之定时任务
之前在C#环境下写定时任务是用quartz,那在java netty这里如何实现呢?在服务器上开发,总免不了有些任务是定时执行的。 比如说,定时下发状态查询等;那么在netty下使用什么方法来完成定时任务的功能呢?https://www.w3cschool.cn/essential_netty_in_action/essential_netty_in_action-pwme28...原创 2020-04-07 15:12:00 · 2642 阅读 · 2 评论 -
Netty之客户端列表
主要想要实现的功能是:在服务端把每一个连上来的客户端进行保存:1、用于对指定的客户端进行指令下发;2、对于通过登录验证的客户端进行添加、删除管理等;其中,大致的思路是:如果我的客户端都有一个设备编号,那设备注册后,把这个设备的channel还有设备编号存到map里面,然后如果服务端要对某个具体设备下发指令,再根据这个设备编号找到这个channel进行下发。如果该客户端长时间不应答,则剔...原创 2020-04-08 14:02:00 · 1224 阅读 · 1 评论