设想这样的应用场景,服务端与客户端建立连接后,服务端会主动向所有或一部分客户端发送数据,这个在mina2中要如何实现呢?

解决方案 »

  1.   

    因为服务端是不可以主动发起连接的,所以楼主要达到目的,首先需要保持连接不断开。因为一旦断开,服务端就不能发送消息了。保持连接不断开的方法很简单,就是每隔一小段时间发送一个简单的无意义的消息(也称为心跳消息)。心跳消息通常由客户端发起。连接保持了之后,服务器端就可以发送消息了。通过什么对象发送呢?当然是 IoSession 对象。连接创建的时候服务器端就创建了这个 IoSession 对象,现在要做的只是将它保存到某个容器对象,当需要向这个客户端发送消息的时候,将 IoSession 对象取出来,调用 write() 方法就可以了,有可能要调用 isConnected() 检查一下连接状态。
      

  2.   

    我自己倒是发现IoAcceptor类里有一个广播方法broadcast(),通过它可以向所有客户端广播并返回一个Set(WriteFuture),但是如何控制向特定的客户端发消息呢?难道是通过Handler的messageSent()进行过滤?