您的位置:首页 > 理论基础 > 计算机网络

Netty与TCP、HTTP、WebSocket协议简明摘要

2016-12-05 08:06 585 查看
1.同步阻塞I/O(BIO) NIO 伪异步I/O 异步I/O(AIO)

NIO(非阻塞I/O):1个IO线程处理多个客户端连接,非阻塞,同步

同步阻塞IO:一个IO线程处理一个客户端连接,阻塞,同步

伪异步IO:M个线程处理N个客户端连接(其中M≥N),阻塞,同步

异步IO:不需要启动额外的IO线程,被动回调,非阻塞,异步

2.TCP粘包问题

TCP基于流的方式进行数据传输,由于底层的TCP无法理解上层的业务数据,因此需要上层的应用协议栈设计解决这个问题,如:

消息定长

在包尾增加回车换行符进行分割,如FTP协议

将消息分为消息头和消息体,消息头重包含表示消息总长度(或消息体长度)的字段

更复杂的应用层协议

用法:

解决粘包:LineBasedFrameDecoder和StringDecoder

自动完成以分隔符做技结束标志的消息的解码:DelimiterBasedFrameDecoder

自动完成对定长消息的解码:FixedLengthFrameDecoder

3.编解码(序列化)技术

Protobuf:ProtobufDecoder仅负责解码,不支持读半包,因此需要使用

Netty提供的ProtobufVarint32FrameDecoder

继承Netty提供的通用半包解码器LengthFieldBasedFrameDecoder

继承ByteToMessageDecoder类,自己处理半包消息

Marshalling:Netty的Marshalling编解码器支持TCP粘包和拆包处理,可以开发出与JBoss内部模块进行远程通信的程序,且支持一部非阻塞,降低了基于Netty开发的应用程序与JBoss内部模块对接的难度

4.HTTP协议开发

Netty+HTTP+XML协议栈开发:;利用到了Java的XML数据绑定框架:JiBx

SpringMVC+restful api+json协议栈开发:http://my.oschina.net/u/2273085/blog/481085

5.WebSocket协议开发

HTTP协议的弊端:

HTTP协议为半双工协议,客户端和服务端数据不能同时传输

HTTP消息冗长繁琐

HTTP对服务器的推送为长时间轮询 的方式,会占用很多的带宽和服务器资源

WebSocket协议优点:

单一TCP连接,采用全双工模式通信

对代理、防火墙和路由器透明

没有头部信息、Cookie和身份验证

没有安全开销

通过ping/pong帧保持链路激活

服务器可以I主动传递消息给客户端,不再需要客户端轮询

6.Netty私有协议栈开发

Java中常见的私有协议栈有:通过RMI进行RPC;通过Java的Socket+Java序列化的方式进行跨节点调用;利用开源的RPC框架进行RPC,如Facebook的Thrift,Apache的Avro等;利用标准的公有协议进行跨节点的服务调用,如HTTP+XML,RESTful+JSON或RESTful+WebService等

可靠性设计:心跳机制;重连机制;重复登录保护;消息缓存重发等

安全性设计:内部长连接采用基于IP地址的安全认证机制,服务端对握手请求消息的IP地址进行合法性校验;如果在白名单之内,则通过校验,否则拒绝连接。如果Netty协议栈在公网中使用,则采用严格的安全认证机制,如基于密钥和AES加密的用户名+密码认证机制,也可以采用SSL/TSL安全传输。

参考:

http://www.cnblogs.com/shanyou/p/4085802.html

《Netty权威指南》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  websocket tcp 异步 线程