Netty 4.0在多个端口上有多个协议?

时间:2012-09-03 07:53:53

标签: netty

我正在寻找一个服务器示例,它将端口80上的http处理程序和同一jar中另一个端口上的protobuf处理程序组合在一起。 谢谢!

2 个答案:

答案 0 :(得分:9)

对于我的观点,创建不同的ServerBootstraps并不是完全正确的方式,因为它将导致创建未使用的实体,处理程序,双初始化,它们之间可能的不一致,EventLoopGroups共享或克隆等。

良好的替代方案是为一个Bootstrap服务器中的所有必需端口创建多个通道。 如果采取"写一个丢弃服务器"来自Netty 4.x "Getting Started"的示例,我们应该替换

    // Bind and start to accept incoming connections.
    ChannelFuture f = b.bind(port).sync(); // (7)

    // Wait until the server socket is closed.
    // In this example, this does not happen, but you can do that to gracefully
    // shut down your server.
    f.channel().closeFuture().sync()

使用

    List<Integer> ports = Arrays.asList(8080, 8081);
    Collection<Channel> channels = new ArrayList<>(ports.size());
    for (int port : ports) {
        Channel serverChannel = bootstrap.bind(port).sync().channel();
        channels.add(serverChannel);
    }
    for (Channel ch : channels) {
        ch.closeFuture().sync();
    }

答案 1 :(得分:8)

我不知道你在找什么。它只是创建两个不同的ServerBootstrap实例,配置它们并调用它的绑定(..)。