日期:2014-05-20  浏览次数:20685 次

求教网络编程,client监听共享队列又监听read

现在要写个多线程client,client通过socket和server连接,多线程client之间存在一个共享队列,上层应用把数据封装成数据包后放到该共享队列中(不知道这个设计是否可行!!)。每个client通过并发获取共享队列一个数据包,然后发送给server。如果共享队列为空,那么client和server之间的链路就空闲,当空闲一段时间(60s),server会主动断开该链路,通过发送断开包。(没有client发链路包的方法)

问题是:client如何一方面监听共享队列是否为空,另一方面又获取server发过来的断开包。
不知问题场景有没有描述清楚,小弟现在一个人在做联通短信网关的活,求各位大仙指教一二,不甚感谢。

------解决方案--------------------
如果你不使用NIO的话,就直接:每件事情用一个线程来负责就行了。

比如:负责从共享队列发送数据的,一个线程。负责从Server端获取断开包的,一个线程。

简单来说,就是一条线程负责OutputStream,另一条负责InputStream。
------解决方案--------------------
联通的协议,也是分长连接和短连接的。
而且,楼主要弄明白,对端是哪个供应商的产品,各大厂商,对协议的实现,也有所不同。

可以一个连接,既接收上行信息又发送下行短信;也可以上下行分为两个连接来做。

一般都是分两个连接来做的,一个连接由SP发起,发送下行短信;
另一个连接由运营商发起,发送上行短信和状态报告。

这种情况下,楼主的发送连接,可以考虑伪长连接的办法来实现,就是,有消息发送的时候,你再登陆发送,长时间没消息发送的时候,你自己断开连接,干脆不发维持连接包,也就不接收维持连接包。不过,每隔一个周期,就登陆一下运营商的网关,调戏一下它,看它还活着不。