|
花了大概20个小时后,终于完成对Java Socket的初步封装。暂且把这个jar 包,命名为Valensocket。几天都没睡好了。
Socket是java 网络编程中很重要的一块。而Socket又分为TCP和UCP。TCP和UDP的区别,就如同电话和对讲机。电话每次拨通前都连接,建立稳定的连接以后才能开始说话。
对讲机,说话不需要作连接,直接说了以后就不管了,但对方可能收不到。
TCP连接的优点是,连接可靠稳定,不用担心对方收不到东西,或者收到错误的东西,但是它的缺点是,我每次通话都要新建连接(重新拨号,连接),而新建连接的开销是非常的可观的。例如有很并发而短小的连接请求,对一个系统的压力是相当大的。
UCP的优点是,它不需要建立连接,它很快。但是它是基于不可靠协议,它可能丢失。
就如同用对讲机说话,不时说了对方没反应,这样就要多吼几声。
在相对较少的连接数,而发送数据频繁且量大的条件下,建议采用TCP连接。而在未知连接数,且单次数据量小,次数多的情况,建议用UDP。但是UDP一般会采用确认包机制,来确保发送过程的成功,不成功则重发。这一点和对讲机的通话非常类似
发送 “呼叫王五,请回话”
没反应,再次发送 “呼叫王五,请回话”
收到对方回应 “王五收到,请讲”
下一次发送 “请到A点集合”
收到回应 “王五明白,A点集合”
这次实现的Socket初步封装,保护UDP和TCP的实现。特点:
1. 服务器能接受多个并发连接。
2. 非阻塞,就绪选择
3. 采用queue使得发送接受和数据后续处理分开。
4. 消息确认和重发机制。 调用简单,只需要调用create,init,send,recieve等方法,send,recieve等实际是在操作数据队列,和真正的网络通信是完全隔离的。 除了log4j以外,全部是JDK1.5D的官方类库。使用的全部是基于通道(NIO)的SOCKET,老的那套API全部抛弃。
Nio的核心类库:
ServerSocketChannel, ServerSocket, Selector, SelectionKey, DatagramChannel(UDP)
其它UDP这套东西,已经在电信网管发了两年工单了,事实证明很稳定。TCP刚刚完成,还没有认真测试,而且不包括安全的考虑。在设计着重低耦合,才用好几种设计模式,如工厂,装饰。。。
待正式做好,再做为一个开源包,发布到网络上吧。
|
一共有 1 条评论