2012-01-05 33 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

相關問題