Netty
蛇皮皮蛋
求大佬笔下留情……
展开
-
Netty协议开发(WebSocket)
WebSocket是H5开始提供的一种游览器与服务器间进行双全工通信的网络技术,WebSocket通信协议与2011年被IETF定义为标准RFC6455,WebSocket API被W3c定义为标准。其特点如下:单一的TCP连接,采用双全工模式通信; 对代理、防火墙和路由器透明; 无头部信息、Cookie和身份验证; 无安全开销; 通过“ping/pong”帧保持链路激活; 服务...原创 2018-10-28 15:12:48 · 4445 阅读 · 3 评论 -
Netty(编解码器框架)
每个网络应用程序都必须定义如何解析在两个节点之间来回传输的原始字节,以及如何将其和目标应用程序的数据格式做相互转换。这种转换逻辑由编解码器处理,编解码器 由编码器和解码器组成,它们每种都可以将字节流从一种格式转换为另一种格式。 如果将消息看作是对于特定的应用程序具有具体含义的结构化的字节序列—它的数据。那么编码器是将消息转换为适合于传输的格式(最有可能的就是字节流);而对应的解...原创 2018-11-15 00:02:04 · 5106 阅读 · 0 评论 -
Netty(预置的ChannelHandler和编解码器)
通过SSL/TLS保护Netty应用程序 为了支持SSL/TLS,Java提供了javax.net.ssl包,它的SSLContext和SSLEngine类使得实现解密和加密相当简单直接。Netty通过一个名为SslHandler的ChannelHandler实现利用了这个API,其中SslHandler在内部使用SSLEngine来完成实际的工作。Netty的OpenSSL/SSL...原创 2018-11-15 23:12:21 · 5185 阅读 · 0 评论 -
Netty(引导 Bootstrapping)
Bootstrap类引导类的层次结构包括一个抽象的父类和两个具体的引导子类:(ctrl+shift+alt+u) 服务器致力于使用一个父Channel来接受来自客户端的连接,并创建子Channel以用于它们之间的通信;而客户端将最可能只需要一个单独的、没有父Channel的Channel来用于所有的网络交互。两种应用程序类型之间通用的引导步骤由AbstractBootstrap...原创 2018-11-13 23:45:07 · 4059 阅读 · 0 评论 -
Netty(ChannelHandler 和 ChannelPipeline)
ChannelHandler家族channel的生命周期 Interface Channel定义了一组和ChannelInboundHandler API密切相关的简单但功能强大的状态模型,其Channel主要有4个状态。 状态 描述 ChannelUnregistered Channel 已经被创建,但还未注...原创 2018-11-11 18:36:08 · 10127 阅读 · 1 评论 -
Netty(ByteBuf)
网络数据的基本单位总是字节。Java NIO提供了ByteBuffer作为它的字节容器,但是这个类使用起来过于复杂,而且也有些繁琐。Netty的ByteBuffer替代品是ByteBuf,一个强大的实现,既解决了JDK API的局限性,又为网络应用程序的开发者提供了更好的API。 Netty的数据处理API通过两个组件暴露——abstract class ByteBuf和int...原创 2018-11-10 14:31:27 · 5470 阅读 · 0 评论 -
Netty(EventLoop 和线程模型)
EventLoop接口 Netty的EventLoop是协同设计的一部分,它采用了两个基本的API:并发和网络编程。首先,io.netty.util.concurrent包构建在JDK的java.util.concurrent包上,用来提供线程执行器。其次,io.netty.channel包中的类,为了与Channel的事件进行交互,扩展了这些接口/类。 在这个模型中,一个...原创 2018-11-12 23:59:18 · 8331 阅读 · 0 评论 -
Netty传输
Netty传输的API的核心是interface Channel,它用于所有的I/O操作。 每个Channel都将会被分配一个ChannelPipeline和ChannelConfig。ChannelConfig包含了该Channel的所有配置设置,并且支持热更新。由于特定的传输可能具有独特的设置,所以它可能会实现一个ChannelConfig的子类型。 由于Channel...原创 2018-11-10 01:30:56 · 4600 阅读 · 0 评论 -
Netty协议栈开发
由于现代软件的复杂性,一个大型软件系统往往会被人为地拆分称为多个模块,另外随着移动互联网的兴起,网站的规模越来越大,为了能够支撑业务的发展,需要集群和分布式部署。模块之间的通信就需要进行跨节点通信。在传统的Java应用中,通常使用4中方式进行跨节点通信:通过RMI进行远程服务调用 通过Java Socket + Java序列化 RPC框架 Thrift、Apache的Avro...原创 2018-10-30 19:59:40 · 4374 阅读 · 0 评论 -
Netty协议开发(HTTP)
HTTP是一个属于应用层的面向对象协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。HTTP协议的URLhttp://host[":"port][abs_path]http表示通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号,为空则使用默认端口80;abs_path指定请求资源的URI。HTTP请求消息(Htt...原创 2018-10-27 18:43:21 · 6154 阅读 · 0 评论 -
Netty粘包/拆包(二)
利用DelimiterBasedFrameDecoder解决TCP粘包问题服务端:import io.netty.bootstrap.ServerBootstrap;import io.netty.buffer.Unpooled;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitiali...原创 2018-10-24 21:28:38 · 4171 阅读 · 0 评论 -
Netty编解码(MessagePack实现)
MessagePack是一个高效的二进制序列化框架,它像JSON一样支持不同语言间的数据交换,但是它性能更快,序列化后码流更小。MessagePack特点:1.编解码高效,性能高;2.序列化后的码流小;3.支持跨语言。实现:首先需要的jar: <dependency> <groupId>io.netty&l...原创 2018-10-26 21:30:55 · 6045 阅读 · 3 评论 -
Netty粘包/拆包(一)
TCP出现粘包拆包原因有三个:1.应用程序write写入的字节大小大于套接口发送缓冲区大小;2.进行MSS(最大报文长度)大小的TCP分段(TCP报文长度-TCP头部长度>MSS的时候将发生拆包);3.以太网帧的payload大于MTU(最大数据包大小)进行IP分片。粘包的解决方案:1.消息定长,例如每个报文的大小为固定长度200字节,如果不够,空格补空格;2.在...原创 2018-10-23 23:32:55 · 5602 阅读 · 0 评论 -
Netty编解码(Protobuf实现)
Java序列化的缺点Java序列化从JDK1.1版本就已经提供了,它不需要添加额外类库,只需要实现java.io.Serializable并生成序列ID即可。但是在远程服务调用(RPC)时,很少直接使用Java序列化进行消息的编解码和传输,原因有一下几点:1.无法跨语言最致命的原因:由于Java序列化技术是Java内部的私有协议,其他语言并不支持,所以相对于用户来说它完全是黑盒。而RP...原创 2018-10-25 23:14:49 · 6747 阅读 · 0 评论 -
Netty(WebSocket聊天器)
处理 HTTP请求 如果被请求的URL以/ws结尾,那么将会把该协议升级为WebSocket;否则,服务器将使用基本的HTTP/S。在连接已经升级完成之后,所有数据都将会使用WebSocket进行传输。package netty.in.action.websocket;import io.netty.buffer.Unpooled;import io.netty....原创 2018-11-16 23:48:28 · 6314 阅读 · 0 评论