日期:2014-05-16  浏览次数:20599 次

一个关于长连接的问题
最近有个联通短信的项目,里面涉及到一个长连接的问题。
是这样的,如果是短信上行(也就是说联通发送短信包给我们的服务程序),那么我们这边就需要做服务器,联通那边就来主动连接我们的服务程序,之后,这个连接是一直保持者,也就是一个长连接,并且每隔一定的时间比如10S双方都主动发起心跳包来维持连接。
在这条链路上,有两件事要做,一是收发正常的短信包,二是收发心跳包。
我们要求写的就是这个服务程序。
我是这么想的,程序启动后,一直阻塞,直到联通的连接过来,然后就用一个线程完成短信的收发和心跳包的维持。
但是,这里存在几个问题不知如何做到:
1,有个规定是这样的,链路有且只能有一条。也就是说任何时候,服务端只能允许一个这样的连接,如果联通在旧连接未断开的情况下又发起一个同样的连接过来,服务端是不理睬的;
2,假如有这样的情况,某个时候链路断开了,服务程序并不知道,因为可能还在等待心跳包的发送,但联通那边已经知道了,并且又发起了一个连接。正常情况下,我应该是接受新连接,并且关闭旧连接。

------解决方案--------------------
没写过异步网络通讯?