2012-01-05 84 views
1

我目前正试图发送消息到所有浏览器基于java的客户端套接字io socket.io-netty。但目前它只发送消息到一个浏览器一次。 的snippent是以下几点:发送消息到所有浏览器使用基于Java的套接字io客户端的netty

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

可以使用的Netty通道组用于此目的

.... 
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

+0

一看我已经试过这一点,我编写了allClients.write(message),但收到“IllegalArgumentException:不支持的消息类型:...”。你如何发送消息? – Ivan 2012-01-15 12:25:46

+0

该消息应该是一个通道缓冲区,我不熟悉socket.io,我猜它可能支持像Netty这样的处理程序管道,因此必须在广播转换处理程序之后有一个编码处理程序,然后在编码后发送消息它到一个通道缓冲区对象。 – 2012-01-16 05:16:54

相关问题