- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Netty 来实现 TCP 协议(protocol)的服务器和客户端。在服务器端,我为它监听的每个端口创建了类 bootStrap 和 pipelineFactory 的一个实例,并且它运行良好且快速。
但是在客户端,我还没有清楚地了解如何构建它。我需要打开与数千个不同目的地的数千个连接。我正在 Spring Framework 上开发该项目,因此我可以轻松创建单例 bean 并将它们作为属性注入(inject)。我正在评估 3 个选项:
使用 ClientBootstrap 和 PipelineFactory 的单例实例。每个连接都使用如下代码来获取 channel :
public Channel connect(final InetSocketAddress serverAddress, final ChannelPipelineFactory pipelineFactory, int timeout, TimeUnit unit) throws InterruptedException {
ChannelFuture future;
synchronized (bootstrap){
bootstrap.setPipelineFactory(pipelineFactory);
future = bootstrap.connect(serverAddress);
future.addListener(new ChannelFutureListener() {
@Override
public void operationComplete(ChannelFuture future) throws Exception {
if (future.isSuccess()) {
//TODO set here some channelLocal properties I need to configure the session (eg: user, password etc...)
}
else{
throw new RuntimeException(future.getCause()
.getMessage());
}
}
});
}
return future.getChannel();
}
我的解决方案还必须能够配置管道以启用或禁用 SSL 或日志处理程序,也许可以使用此 Abe solution to configure getPipeline()
我的第二个选择是使用 ClientBootstrap 的单例实例,但在每个传出客户端连接上创建一个新的 PipelineFactory。这有助于我配置管道,因为我可以在 pipelineFactory 实例上设置属性。
第三个选项是在每个传出连接上创建新的 bootStrap 对象和 pipelineFactory。这允许我在每个连接上配置 tcp.delay 或 tcp.keepalive 等属性,并允许我删除连接方法上的同步块(synchronized block),这可以加快客户端连接速度。
我认为第一个是最快的并且使用最低的内存,但第三个是最可配置的并且可能易于开发。
您能给我一些关于这种方法的优缺点的建议吗?也许其中之一是错误的?
非常感谢!
最佳答案
ClientBootstrap 实例很便宜。我只需为每个连接创建一个新的连接,并为所有连接重用 NioSocketClientChannelFactory。或者,如果可以的话,您可能希望对 ssl 连接使用一种 Bootstrap ,对非 ssl 连接使用一种 Bootstrap 。这将使您避免一些内存开销。
关于java - Netty 上的 Singleton bootstrap 和 pipelineFactory 作为 Tcp 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15204818/
我正在使用 Netty 来实现 TCP 协议(protocol)的服务器和客户端。在服务器端,我为它监听的每个端口创建了类 bootStrap 和 pipelineFactory 的一个实例,并且它运
我是一名优秀的程序员,十分优秀!