【问题标题】:Is there any way i get the reference of ChannelPipeline created when i a client connect to server on serverside?当客户端连接到服务器端的服务器时,有什么方法可以让我获得 ChannelPipeline 的引用?
【发布时间】:2013-03-19 11:53:30
【问题描述】:

如果是同步 TCP 服务器,当客户端连接时,我会得到客户端示例的参考:

 int serverPortNum = 9000;
socket while(true) {
     ServerSocket connectionSocket = new ServerSocket(serverPortNum);
     Socket dataSocket = connectionSocket.accept( );
     // pass this reference(dataSocket ) to other part of program to read or write depending on app logic
}

现在我想通过 Netty 使用异步 TCP 服务器,所以有什么方法可以获取在连接新客户端时创建的 ChannelPipeline 或 ChannelHandler 的引用。

在客户端我可以轻松做到:示例代码: NioClientSocketChannelFactory ncscf = new NioClientSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool()); ClientBootstrap clientBootstrap = new ClientBootstrap(ncscf);

    final DummyHandler  dummy = new DummyHandler();
    clientBootstrap.setPipelineFactory(new ChannelPipelineFactory() { 
        @Override
        public ChannelPipeline getPipeline() throws Exception { 
            return Channels.pipeline(dummy); 
        } 
    }); 

    InetAddress inetaddress = InetAddress.getByName(host);
    ChannelFuturecf=clientBootstrap.connect(newInetSocketAddress(inetaddress,port));                                                             

所以每次我创建一个新客户端时,我都会有新的 DummyHandler 参考

在服务器端:示例代码: ServerBootstrap 引导 = 新的 ServerBootstrap( 新的 NioServerSocketChannelFactory( Executors.newCachedThreadPool(), Executors.newCachedThreadPool()));

    bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
        public ChannelPipeline getPipeline() throws Exception {
            return Channels.pipeline(new DummyServerHandler());
        }
    });


    bootstrap.bind(new InetSocketAddress(port));
   So when client request connection new DummyServerHandler object is created but i cannot get reference of this.  

【问题讨论】:

  • 您是否看过示例服务器,例如 echo server 和 HTTP snoop server?
  • @TrustinLee:我已经检查了 EchoServer 示例,但我找不到在哪里可以获得参考。我已经编辑了原始问题以更详细地解释我的问题。

标签: tcp netty tcpserver


【解决方案1】:

我可能误解了这个问题,但这行不通。

Channel.getpipeline()

【讨论】:

  • 我认为你没有理解我的问题。当一个新的客户端尝试与服务器连接时,将调用 ChannelPipelineFactory 的 getPipeline 方法。我想在连接新客户端时获取每个 DummyServerHandler 的引用。
猜你喜欢
  • 1970-01-01
  • 2020-01-20
  • 2021-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
相关资源
最近更新 更多