使用基于Java的socket io client for netty向所有浏览器发送消息

时间:2012-01-05 12:30:33

标签: java socket.io netty

我正在尝试向套接字io socket.io-netty的基于java的客户端的所有浏览器发送消息。但是目前它一次只向一个浏览器发送消息。 片段如下:

public class IOClientListener implements INSIOHandler {
    private INSIOClient ioClient=null;
    private final static Logger log=LoggerFactory.getLogger(IOClientListener.class);

    @Override
    public void OnConnect(INSIOClient client) {
        System.out.println("A user connected :: " + client.getSessionID());
                client.send("Hey you are connected to myhope.com");

    }

    @Override
    public void OnDisconnect(INSIOClient client) {
        System.out.println("A user disconnected :: " + client.getSessionID() + " :: hope it was fun");  
    }

    @Override
    public void OnMessage(INSIOClient client, String message) {
        System.out.println("A message received:: " + message + " :: hope it was fun");
    }

    @Override
    public void OnShutdown() {
    }

    public INSIOClient getIOClient(){
        return this.ioClient;
    }
}

我想知道如何使用此客户端广播消息。在此先感谢

1 个答案:

答案 0 :(得分:2)

您可以将Netty ChannelGroup用于此目的

....
 static ChannelGroup allClientChannels = new DefaultChannelGroup();


 @Override
public void OnConnect(INSIOClient client) {
    System.out.println("A user connected :: " + client.getSessionID());
            client.send("Hey you are connected to myhope.com");

   allClientChannels.add(client.getCTX().getChannel());
}


@Override
public void OnDisconnect(INSIOClient client) {
    System.out.println("A user disconnected :: " + client.getSessionID() + " :: hope it was fun");
    allClientChannels.remove(client.getCTX().getChannel());

}

...

//when you want to send a broadcase message

allClientChannels.write(yourMessage);

有关详细信息,请查看ChannelGroup API Doc