日历

2008 7.6 Sun
  12345
6789101112
13141516171819
20212223242526
2728293031  
«» 2008 - 7 «»

文章搜索

日志文章

2008年04月16日 22:48:17

完成对Java Socket的封装

花了大概20个小时后,终于完成对Java Socket的初步封装。暂且把这个jar 包,命名为Valensocket。几天都没睡好了。

Socketjava 网络编程中很重要的一块。而Socket又分为TCPUCPTCPUDP的区别,就如同电话和对讲机。电话每次拨通前都连接,建立稳定的连接以后才能开始说话。

对讲机,说话不需要作连接,直接说了以后就不管了,但对方可能收不到。

TCP连接的优点是,连接可靠稳定,不用担心对方收不到东西,或者收到错误的东西,但是它的缺点是,我每次通话都要新建连接(重新拨号,连接),而新建连接的开销是非常的可观的。例如有很并发而短小的连接请求,对一个系统的压力是相当大的。

UCP的优点是,它不需要建立连接,它很快。但是它是基于不可靠协议,它可能丢失。

就如同用对讲机说话,不时说了对方没反应,这样就要多吼几声。

在相对较少的连接数,而发送数据频繁且量大的条件下,建议采用TCP连接。而在未知连接数,且单次数据量小,次数多的情况,建议用UDP。但是UDP一般会采用确认包机制,来确保发送过程的成功,不成功则重发。这一点和对讲机的通话非常类似

发送 “呼叫王五,请回话”

没反应,再次发送 “呼叫王五,请回话”

收到对方回应 “王五收到,请讲”

下一次发送 “请到A点集合”

收到回应 “王五明白,A点集合”

这次实现的Socket初步封装,保护UDPTCP的实现。特点:

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刚刚完成,还没有认真测试,而且不包括安全的考虑。在设计着重低耦合,才用好几种设计模式,如工厂,装饰。。。

待正式做好,再做为一个开源包,发布到网络上吧。

Tags: socket  

类别: JAVA ee |  评论(1) |  浏览(2206) |  收藏
一共有 1 条评论
1楼 老邓 2008年04月17日 08:09:35 Says:
不错
发表评论