怎么能实时更新socket列表?

颖辉小居 发布于 2016/01/07 18:11
阅读 183
收藏 0
javaWEb服务器 接收手机app请求,触发action调用service,为了service可以调用本项目中TCP相关socket给tcp客户端发送数据,每当有一个客户连接本项目的serversocket监听,就将socket放入一个全局的 List中。这样每次手机触发业务要给TCP的客户端发送消息时,遍历所有的socket,依次发送。可是服务器运行过程中,会产生很多断开的socket,依然给他们发送数据会很浪费资源。请问怎么能在socket断开时,从list里清除啊。
加载中
1
如比如比
如比如比
非要用list来保存么,多部手机同时短怎么弄,用HashTable不行么,比较旧的方法标识timeout时间,用维护线程来维持池中的连接,当然客户端的切断指令是优先处理的。
如比如比
如比如比
回复 @颖辉小居 : 分得这么清么?面向缓存比面向流有优势么,异步比同步效率要高啊。
颖辉小居
颖辉小居
回复 @茶_壶 : mina是异步的socket是同步,mina基于NIO的。
如比如比
如比如比
回复 @颖辉小居 : 看上去像是mina的客户端哈,http://m.blog.csdn.net/article/details?id=8474045
颖辉小居
颖辉小居
回复 @茶_壶 : 我看了一些教程,基本的使用可以,可是我的业务有一个情况是,java服务器在收到手机用户APP一个请求处理了以后,要发给C++服务器一条消息。这个是由Struts2的action触发的,怎么能调用MIna发送消息
如比如比
如比如比
回复 @颖辉小居 : mina确实是在sokect的基础上作的,功能也很强大,但短时间内驾驭一架马车都是不容易的,何况是个火箭
下一页
1
xpbob
xpbob
socket是双工的,里面有isClosed()的方法判定,你循环发消息的时候判断一下,isClosed为true时就从链表里移除
颖辉小居
颖辉小居
回复 @xpbob : 哦,谢谢
xpbob
xpbob
@颖辉小居 对面断开没有用,可以通过发送时的异常进行删除
颖辉小居
颖辉小居
如果是对面断开了链接 用这个方法可以获得 true吗?
0
ShayZhao
ShayZhao
建议将长连接socket单独一台服务器管理,然后架设一台消息服务器(mq,zq类似的都可以)负责业务服务器与socket服务器间通信,这样方便扩展。至于socket服务器实现可以采用vertx这个轻量级基于jvm的框架,很好上手,至少我觉得比mina好上手。
返回顶部
顶部