2012-10-20 37 views
10

Tôi cần phải làm cho khách hàng có thể thực hiện nhiều kết nối. Tôi sử dụng Netty 4.0. Thật không may tất cả các ví dụ hiện tại không cho thấy cách tạo nhiều kết nối.Netty 4 nhiều khách hàng

public class TelnetClient { 
    private Bootstrap b; 
    public TelnetClient() { 
     b = new Bootstrap(); 
    } 
    public void connect(String host, int port) throws Exception { 
     try { 
      b.group(new NioEventLoopGroup()).channel(NioSocketChannel.class).remoteAddress(host, port).handler(new TelnetClientInitializer()); 
      Channel ch = b.connect().sync().channel(); 
      ChannelFuture lastWriteFuture = null; 
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 
      for (;;) { 
       String line = in.readLine(); 
       if (line == null) break; 
       lastWriteFuture = ch.write(line + "\r\n"); 
       if (line.toLowerCase().equals("bye")) { 
        ch.closeFuture().sync(); 
        break; 
       } 
      } 
      if (lastWriteFuture != null) lastWriteFuture.sync(); 
     } finally { 
      b.shutdown(); 
     } 
    } 
    public static void main(String[] args) throws Exception { 
     TelnetClient tc = new TelnetClient(); 
     tc.connect("127.0.0.1", 1048); 
     tc.connect("192.168.1.123", 1050); 
    //... 
    } 
} 

Đây có phải là quyết định đúng không? hoặc nó có thể tốt hơn?

Trả lời

9

Có điều gần đúng của nó .. Điều duy nhất bạn PHẢI thay đổi là tạo NioEventLoopGroup trên mọi kết nối.

Trường hợp NioEventLoopGroup rất tốn kém để chúng được chia sẻ. Tạo một cá thể và chia sẻ nó, bằng cách chuyển cùng một thể hiện cho Bootstrap.group (...) mọi lúc ..

+0

và TelnetClientInitializer(), cũng đủ để tạo một cá thể? – user1221483

+0

Phụ thuộc vào mã .. Có phải @Sharable hay không;)? –

+0

Có, đó là Sharable – user1221483

Các vấn đề liên quan