Netty、Mina2是很是优秀的javaNIO+ThreadPool线程池通讯框架 http://www.cnblogs.com/51cto/archive/2010/09/06/1819361.html 提到通讯就得面临两个问题,一是通讯协议的选择,二是数据协议的定义。通讯协议耳熟能详的就有好几种,TCP,UDP,HTTP,FTP等等。数据协议是一种数据交换的格式,像jason,xml,amf3,google protocol均可以用做数据协议,你也能够本身根据通讯的效率,安全等因素来定义本身的数据协议。html
通讯系统的开发是一项很复杂的工做,不要觉得往发服务端发一个Hello World!就认为彻底掌握了通讯系统的开发。归纳来讲要开发一个健壮的通讯系统,必须从这几个方面来着手。java
一,通讯粘包的处理算法
这里包的概念是逻辑上的数据包,也就是咱们发送的一个完整业务消息包,粘包状况有两种,一种是粘在一块儿的包都是完整的数据包,另外一种状况是粘在一块儿的包有不完整的包。不是全部的粘包现象都须要处理,若传输的数据为不带结构的连续流数据(如文件传输),则没必要把粘连的包分开(简称分包)。但在实际工程应用中,传输的数据通常为带结构的数据,这时就须要作分包处理。编程
为了不粘包现象,可采起如下几种措施。一是对于发送方引发的粘包现象,用户可经过编程设置来避免,TCP提供了强制数据当即传送的操做指令push,TCP软件收到该操做指令后,就当即将本段数据发送出去,而没必要等待发送缓冲区满;二是对于接收方引发的粘包,则可经过优化程序设计、精简接收进程工做量、提升接收进程优先级等措施,使其及时接收数据,从而尽可能避免出现粘包现象;三是由接收方控制,将一包数据按结构字段,人为控制分屡次接收,而后合并,经过这种手段来避免粘包。安全
以上提到的三种措施,都有其不足之处。总的来讲下降了通讯系统的吞吐量。咱们能够本身设计一个分包算法来处理粘包的问题,该算法的实现是这样的:网络
若是你是Java的爱好均可以参考一下Mina和netty2的实现,像Mina和Netty2都提供了粘包处理类可供使用,像Mina的CumulativeProtocolDecoder类,Netty2的LengthFieldBasedFrameDecoder。框架
二,数据协议选择异步
如今已经有不少数据协议可供咱们选择,像jason,xml,amf3,google protocol等等,这些协议相应的语言都有API来对自身数据作协议处理,咱们选择协标准无非就是效率和大小,这里每一个人能够根据实际的应用环境选择适合的数据协议。优化
三,网络系统的安全性google
网络安全是一个永远的话题,对通讯数据加密通常常RSA对byte流加密,FLOOD验证,IP黑名单验证都是必须考虑到的。
以上是作网络开发必须了解的一些基础知识,在这里咱们使用一个具体的实例来加深一下理解,Java与Flex使用AMF3数据协议通讯。作过网络开发的通常都会知道套接字(SOCKET),不少语言都会通SOCKET来提供对网络操做的API,Java的提供的NIO SOCKET是一个高效的异步通讯API,固然能够在这个基础上来开发咱们的网络应用,但这种Native API须要咱们花不少精力来处理网络通讯的细节,消弱了咱们对业务的关心。为咱们开发带来不少不便性,幸亏Java有不少现成的NIO SOCKET框架可供使用,像Mina,Netty2,xSocket等等,这些框架处理了不少底层的通讯问题,提供了一些易用的API以供使用。在这个实例中咱们使用Netty2来作通讯框架。
转自 http://www.cnblogs.com/51cto/archive/2010/09/06/1819361.html