
netty
文章平均质量分 78
IM即时通讯
想养一只萨摩耶~
请在合适的地方掉头并重新规划路线
展开
-
TCP粘包|拆包和解决方案
客户端发送5个Message对象,客户端每次发送一个message对象,服务器端就会每次接受一个message,分5次进行解码,每次读取到一个message,会回复一个message对象给客户端。收发两端(客户端和服务端)都要有一一成对的socket,因此,发送端为了将多个发给接收端的包,更有效的发给对方,使用了优化算法(),将许多数据量小且间隔小的数据,合并成了一个大数据块,然后进行封包,这样做虽然提升了效率,但是接收端就难于分辨出完成的数据包,因此。客户端向服务端发送10条消息,看服务端如何接受。原创 2023-02-27 13:46:12 · 1110 阅读 · 0 评论 -
ProtoBuf介绍
1) ProtoBuf是Google发布的开源项目,是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化,它很适合做数据存储或RPC[远程过程调用]数据交换格式,目前很多公司正在由http+json->tcp+protobuf。使用protobuf编译器能够自动生成代码,ProtoBuf是将类的定义使用.protobuf文件进行描述(注意:在idea中编写.proto文件时,会自动提示是否下载.protot编写插件,可以让语法高亮)发现,已经用protobuf实现了数据的传输。原创 2023-02-25 15:15:32 · 1672 阅读 · 0 评论 -
netty心跳
Netty中的心跳检测主要是通过IdleStateHandler这个类进行心跳的处理,它可以对一个Channel的读\写设置定时器,当Channel在一定时间间隔内没有数据交互时(即处于Idle状态)就会触发指定的事件。因为网络连接是不可靠的,像在TCP长连接或者webSocket长连接时都会使用心跳机制,即发送特殊的数据包告诉自己的业务没办完,不要关闭连接。服务端一直会依次打印读空闲、写空闲、读空闲、读写空闲。当服务器超过3秒没有读时,就提示读空闲。当服务器超过5秒没有写时,就提示写空闲。原创 2023-02-18 15:41:52 · 599 阅读 · 0 评论 -
netty群聊系统
第三个客户端启动时,告诉服务器上线,并且通知第一个和第二个启动的客户端。第二个客户端启动时,告诉服务器上线,并且通知第一个启动的客户端。其中一个客户端离开时,通知其它客户单端和服务端。第一个客户端启动时,会告诉服务器上线了。看到结果发现符合当初的设计。启动一个服务端,多个客户端。原创 2023-02-18 11:24:49 · 724 阅读 · 0 评论 -
Netty实现Http服务器案例
服务器可以恢复消息给浏览器:“hello,我是服务器”,并对特定请求资源进行过滤。Netty可以做服务器端开发,并且理解handle实例和客户端及其请求的关系.我们只请求了一次,但是浏览器却发出了2次请求,并且对这两个请求都做了响应。每个请求对应的handle和pineline是独立的,不会共享。那么如何对这个网站图标进行过滤,使服务器对其不做响应呢?对此,可以请求2次并且打印出其hash值进行比对。发现连续2次请求所打印的hash值都不一样。再次重新请求发现:已经成功拦截。http协议不是一个长连接。原创 2023-02-12 11:40:27 · 822 阅读 · 0 评论 -
Future-Listener
通过addListener方法来注册监听器,当操作已完成(isDone方法返回完成),将会通知指定的监听器;如果Future对象已完成,则通知指定的监听器。当Future刚刚创建时,处于非完成状态,调用者可以通过返回的ChannelFuture来获取操作执行的状态,注册监听函数来执行完成后的操作。通过isCancelled判断当前已完成的操作是否被取消。通过isSuccess方法判断当前已完成的操作是否成功。通过getCause方法获取已完成的当前操作失败的原因。通过isDone方法判断操作是否完成。原创 2023-02-11 14:52:29 · 291 阅读 · 0 评论 -
Netty中的异步任务TaskQueue
来处理我们的业务,那么假如在某一个 Handler有一个长时间的操作,这就势必会造成 pipiline 的阻塞,这是我们就可以将这个耗时的处理提交到。结果:此时肯定是5秒耗时代码完成之后,客户端才接受消息,输出“hello,客户端~”服务端处理器代码:在channelRead()方法中睡眠5秒充当耗时业务代码。发现此时是在先输出了hello,客户端,然后在输出了异步消息。事件循环(NioEventLoop) 的过程中,我们会在。客户端和客户端处理器代码在上篇博客,此处就不在粘贴。原创 2023-02-10 11:52:01 · 267 阅读 · 0 评论 -
netty概述
netty概述:Netty是由JBoss提供的一个java开源框架。Netty提供异步的、基于事件驱动的网络应用程序框架,用一开发高性能,高可靠的io程序Netty可以帮助你快速、简单构建一个网络应用,相当于简化和流程化了NIO的开发过程Netty是目前最流行的NIO框架,Netty在互联网领域、大数据分布计算领域、游戏行业、通信行业都获得了广泛的应用,知名的ES、Dubbo框架内部都采用了Netty。原创 2023-02-09 16:20:47 · 542 阅读 · 2 评论 -
Selector选择器
java中的nio,用非阻塞的IO方式。可以用一个线程,处理多个客户端连接,就会使用到Selector选择器Selector能够检测多个注册的通道上是否有事件发生(注意:多个Channle以事件的方式可以注册到同一个Selector),如果有事件发生获取事件然后针对每个事件进行相应的处理,这样就可以用一个单线程管理多个通道,也就是管理多个连接和请求。只有在连接有多个读写事件发生时,才会进行读写,就大大减少了系统的开销,并且不会为每个连接都创建一个线程,不用去维护多个线程。原创 2023-01-29 16:00:20 · 649 阅读 · 0 评论 -
Java NIO-Buffer
1 概述Java NIO中的Buffer用于和NIO通道进行交互。数据是从通道进入缓冲区,从缓冲区写入通道中的。缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成了NIO Buffer对象。在NIO中所有的数据都是用缓冲区处理的。2 Buffer使用Buffer一般步骤:第一步:写入数据到Buffer第二步:调用flip()第三步:从Buffer中读取数据第四步:调用clear()或者compact方法注意:读取数据时,需要调用flip()方法将原创 2022-02-16 21:03:23 · 1034 阅读 · 0 评论 -
Java-NIO-Selector
1 概述Selector一般称之为选择器,也可以翻译为多路复用器。它是Java-NIO中核心组件中的一个,用于检查一个或多个NIO Channel(通道)的状态是否处于可读、可写。如此可实现单线程管理多个channels,也就是可以管理多个网络连接。使用Selector的好处在于:使用更少的线程来就可以处理通道了,相比使用多个线程,避免了线程上下文切换带来的开销2 可选择通道(SelectableChannel)1)不是所有的Channel都能够被Selector复用的。像F...原创 2022-02-19 13:35:46 · 1481 阅读 · 0 评论 -
java NIO-Channel
1 概述之前听朋友说,他们公司有一个业务场景对于IO的操作要求较高,项目组长让他用NIO来完成这个需求,他一听一脸茫然的问组长:啥是NIO啊?项目组长听后对他挥挥手说:“起开起开,我来”。朋友后来和我分享这个事情,对于都是菜鸡的我们来说,我也不知道啥叫NIO。于是虎年伊始,我决定来学学这个NIO。以免有一天我的项目组长对我说,你起开起开,我来。Java NIO是Java1.4之后引入的一个全新的API,它可以替代标准的IO操作,NIO既支持面向缓冲区的操作,同时也是基...原创 2022-02-13 15:20:23 · 881 阅读 · 0 评论