1个回答
展开全部
长连接的话,服务端推送信息给客户端后,你客户端可以选择通知服务端已收到,也可以不通知
不过如果你要等待客户端响应后才能发送其他消息的话,你可以选择加标识 你可以弄个静态map 每次服务端发送一个消息给客户端 就 把 sessionid 作为key 放进去, 待客户端通知消息已接受再remove掉,服务端发送消息客户端方法里面弄个while循环体,如果map里面有这个客户端的sessionid时放入一个消息队列里面,待前面一个消息客户端告诉你已经收到了再去消费队列里面的消息,所以服务端发客户端消息方法 最好起个异步线程 用消费者模式去正滑粗发消举镇息
不过我不建议这让乎么做,长连接的好处 就是你可以再对方为响应的时候 去做其他事情, 你的需求还不如用短连接
不过如果你要等待客户端响应后才能发送其他消息的话,你可以选择加标识 你可以弄个静态map 每次服务端发送一个消息给客户端 就 把 sessionid 作为key 放进去, 待客户端通知消息已接受再remove掉,服务端发送消息客户端方法里面弄个while循环体,如果map里面有这个客户端的sessionid时放入一个消息队列里面,待前面一个消息客户端告诉你已经收到了再去消费队列里面的消息,所以服务端发客户端消息方法 最好起个异步线程 用消费者模式去正滑粗发消举镇息
不过我不建议这让乎么做,长连接的好处 就是你可以再对方为响应的时候 去做其他事情, 你的需求还不如用短连接
追问
恩恩,那Mina怎么保证服务器发消息客户端绝对能收到呢?
因为我今天测试,客户端已经下线,但没有触发服务端的销毁事件。而且用sess.isClosing() sess.isConnected()判断的结果是这个连接还在,但我客户端的确已经断网下线了。这个问题怎么解决
追答
mina 有个sessionclose方法,我记得
长连接是有心跳检测的,比如几十秒一次,比如说你客户端直接关机,服务端应该还是有连接的,但是过了一段时间就没有了,这个时间应该是可配置
你说怎么保证服务端发消息,客户端绝对能收到,那么就是建立长连接呀,一旦建立连接,客户端不要去关闭连接,除非网络出问题,一般肯定能收到
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询