0

我阅读了 netty 代理示例(https://github.com/netty/netty/tree/master/example/src/main/java/io/netty/example/proxy),我有两个要求。

  1. 我想在代理->服务器上使用固定计数连接。在代理示例中,proxy->server conn。计数等于客户端-> 代理连接。数数。可能太多了。

  2. 当客户端->代理连接结束时,代理->服务器连接必须保持活动状态,当新的客户端->代理连接建立时,重用代理->服务器连接。

如何实施?

4

2 回答 2

0

我认为,您需要的是具有连接池的客户端。

HttpComponents 和 AsyncHttpClient 都支持池化,您可以查看 AsyncHttpClient 中的代码,它们也具有基于 netty 的实现。

于 2013-10-04T22:41:06.067 回答
0

通过使用DefaultChannelGroup来存储您的频道,可以很容易地实现第一个要求。假设ChannelHandler接受传入连接的 是 a singleton,那么您可以使用以下代码。

    // initialize channelgroup in your singleton handler
ChannelGroup ALL_CONNECTIONS = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);

...
@Override    
public synchronized void channelActive(ChannelHandlerContext ctx) throws Exception 
{        
    if(ALL_CONNECTIONS.size() > 100){
        ctx.channel().close();// dont accept further connections
    }else{
        ALL_CONNECTIONS.add(ctx.channel());
        // do whatever logic.
    }
}

我认为您正在考虑第二个要求的“连接池”。如果是这样,我认为这不是一个好主意。因为,当一个新客户端“连接”到您的服务器时,它始终是一个新连接,因为它来自您的网络外部。但是我不确定这一点,有更多知识的人可以回答。

于 2013-10-04T19:14:43.727 回答