202110-12 Netty解决 TCP 粘包拆包的方法 什么是粘包/拆包 一般所谓的TCP粘包是在一次接收数据不能完全地体现一个完整的消息数据。TCP通讯为何存在粘包呢?主要原因是TCP是以流的方式来处理数据,再加上网络上MTU的往往小于在应用处理的消息数据,所以就会引发一次接收的数据无法满足消息的需要,导致粘包的存在。处理粘包的唯一方法就是制定应用层的数据通讯协议,通过协议来规范现有接收的数据是否满足消息数据的需要。我们都知道TC... 继续阅读 >
202110-12 Netty 轻松实现文件上传功能 今天我们来完成一个使用netty进行文件传输的任务。在实际项目中,文件传输通常采用FTP或者HTTP附件的方式。事实上通过TCPSocket+File的方式进行文件传输也有一定的应用场景,尽管不是主流,但是掌握这种文件传输方式还是比较重要的,特别是针对两个跨主机的JVM进程之间进行持久化数据的相互交换。而使用netty来进行文件传输也是利用netty天然的优势:零拷贝功能。很多同学都听说过netty的”零拷贝”功能,但是具体体现在哪里又不... 继续阅读 >
202109-28 如何开发基于Netty的HTTP/HTTPS应用程序 目录一、通过SSL/TLS保护应用程序二、HTTP编解码器三、聚合HTTP消息四、HTTP压缩五、HTTPS六、WebSocket一、通过SSL/TLS保护应用程序SSL和TLS安全协议层叠在其他协议之上,用以实现数据安全。为了支持SSL/TLS,Java提供了javax.net.ssl包,它的SSLContext和SSLEngine类使得实现解密和加密变得相当简单。Netty通过一个名为SsLHandler的ChannelHandler实现了这个API,其中SSLHandler在内部使用SSLEngine... 继续阅读 >
202108-31 分析Netty直接内存原理及应用 目录一、通常的内存模型概述二、Java中的直接内存原理三、Netty中使用直接内存四、总结一、通常的内存模型概述一般地,系统为了保证系统本身的安全性和健壮性,会将内存从逻辑上隔离成内核区域和用户区域,这很容易理解。因为用户行为不可控性太强,暴露得太多,就容易导致各种神奇的用法,超出系统的控制范围。当然,有的语言是支持直接控制内存的,比如C,你可以用一个指针,访问内存中的几乎任意位置的数据(除了一些硬件地址)... 继续阅读 >
202108-11 详解Netty编码器和解码器 目录一、java的编解码二、Netty编解码器2.1解码器(Decoder)2.2代码实现2.3编码器(Encoder)2.4代码实现2.5测试结果三、编码解码器Codec3.1代码实现:一、java的编解码1.编码(Encode)称为序列化,它将对象序列化为字节数组,用于网络传输、数据持久化或者其它用途。2.解码(Decode)称为反序列化,它把从网络、磁盘等读取的字节数组还原成原始对象(通常是原始对象的拷贝),以方便后续的业务逻辑操作。java序列化对象只需... 继续阅读 >
202104-25 如何用Netty实现高效的HTTP服务器 1概述HTTP是基于请求/响应模式的:客户端向服务器发送一个HTTP请求,然后服务器将会返回一个HTTP响应。Netty提供了多种编码器和解码器以简化对这个协议的使用。一个HTTP请求/响应可能由多个数据部分组成,FullHttpRequest和FullHttpResponse消息是特殊的子类型,分别代表了完整的请求和响应。所有类型的HTTP消息(FullHttpRequest、LastHttpContent等等)都实现了HttpObject接口。(1)HttpRequestEncoder将HttpRe... 继续阅读 >
202101-10 Springboot整合Netty实现RPC服务器的示例代码 一、什么是RPC?RPC(RemoteProcedureCall)远程过程调用,是一种进程间的通信方式,其可以做到像调用本地方法那样调用位于远程的计算机的服务。其实现的原理过程如下:本地的进程通过接口进行本地方法调用。RPC客户端将调用的接口名、接口方法、方法参数等信息利用网络通信发送给RPC服务器。RPC服务器对请求进行解析,根据接口名、接口方法、方法参数等信息找到对应的方法实现,并进行本地方法调用,然后将方法调用结... 继续阅读 >
202012-22 Java设计模式之责任链模式的概念、实现以及netty中的责任链模式 本文先介绍了责任链模式的概念及简单实现。再贴了netty中对责任链的实现。最后总结了一点点思考。1、概念相关1.1、概念责任链模式为请求创建了一个接收者对象的链,每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,沿着这条链传递请求,直到有对象处理它为止。1.2、解决了什么:客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将... 继续阅读 >
202010-28 SpringBoot使用Netty实现远程调用的示例 前言众所周知我们在进行网络连接的时候,建立套接字连接是一个非常消耗性能的事情,特别是在分布式的情况下,用线程池去保持多个客户端连接,是一种非常消耗线程的行为。那么我们该通过什么技术去解决上述的问题呢,那么就不得不提一个网络连接的利器——Netty.正文NettyNetty是一个NIO客户端服务器框架:它可快速轻松地开发网络应用程序,例如协议服务器和客户端。它极大地简化和简化了网络编程,例如TCP和UDP套接字服务器。... 继续阅读 >
202010-10 SpringBoot+Netty+WebSocket实现消息发送的示例代码 一.导入Netty依赖<dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.25.Final</version></dependency>二.搭建websocket服务器@ComponentpublicclassWebSocketServer{/***主线程池*/privateEventLoopGroupbossGroup;/***工作线程池*/privateEventLoopGroupworkerGroup;/***服务器*/privateServerBootstrapserver;/***回调*/privateChannel... 继续阅读 >
202010-09 JAVA Netty实现聊天室+私聊功能的示例代码 功能介绍使用Netty框架实现聊天室功能,服务器可监控客户端上下限状态,消息转发。同时实现了点对点私聊功能。技术点我都在代码中做了备注,这里不再重复写了。希望能给想学习netty的同学一点参考。服务器代码服务器入口代码packagenio.test.netty.groupChat;importio.netty.bootstrap.ServerBootstrap;importio.netty.channel.ChannelFuture;importio.netty.channel.ChannelInitializer;importio.netty.channel.ChannelOptio... 继续阅读 >
202010-09 Java Netty HTTP服务实现过程解析 超文本传输协议(HTTP,HyperTextTransferProtocol)是互联网上应用最为广泛的一种网络协议。在后端开发中接触HTTP协议的比较多,目前大部分都是基于Servlet容器实现的Http服务,往往有一些核心子系统对性能的要求非常高,这个时候我们可以考虑采用NIO的网络模型来实现HTTP服务,以此提高性能和吞吐量,Netty除了开发网络应用非常方便,还内置了HTTP相关的编解码器,让用户可以很方便的开发出高性能的HTTP协议的服务,SpringWebf... 继续阅读 >
202010-09 Netty粘包拆包问题解决方案 TCP黏包拆包TCP是一个流协议,就是没有界限的一长串二进制数据。TCP作为传输层协议并不不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行数据包的划分,所以在业务上认为是一个完整的包,可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的TCP粘包和拆包问题。怎么解决?•消息定长度,传输的数据大小固定长度,例如每段的长度固定为100字节,如果不够空位补空... 继续阅读 >
202010-08 java基于netty NIO的简单聊天室的实现 一、为何要使用netty开发由于之前已经用Java中的socket写过一版简单的聊天室,这里就不再对聊天室的具体架构进行细致的介绍了,主要关注于使用netty框架重构后带来的改变。对聊天室不了解的同学可以先看下我的博客(《JAVA简单聊天室的实现》)本篇博客所使用的netty版本为4.1.36,完整工程已上传到Github(https://github.com/Alexlingl/Chatroom),其中lib文件夹下有相应的nettyjar包和source包,自行导入即可。1、为何要重构... 继续阅读 >
202009-29 利用Java搭建个简单的Netty通信实例教程 前言看过dubbo源码的同学应该都清楚,使用dubbo协议的底层通信是使用的netty进行交互,而最近看了dubbo的Netty部分后,自己写了个简单的Netty通信例子。准备工程截图模块详解rpc-commonrpc-common作为各个模块都需使用的模块,工程中出现的是一些通信时请求的参数以及返回的参数,还有一些序列化的工具。rpc-clientrpc-client中目前只是单单的一个NettyClient启动类。rpc-serverrpc-client中目前也只是单单的一个NettyServer... 继续阅读 >
202009-28 深入浅析Netty 在 Dubbo 中是如何应用的 众所周知,国内知名框架Dubbo底层使用的是 Netty 作为网络通信,那么内部到底是如何使用的呢?今天我们就来一探究竟。1.dubbo的Consumer消费者如何使用Netty注意:此次代码使用了从github上clone的dubbo源码中的dubbo-demo例子。代码如下:System.setProperty("java.net.preferIPv4Stack","true");ClassPathXmlApplicationContextcontext=newClassPathXmlApplicationContext(newString[]{"META-IN... 继续阅读 >