作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 netty 时遇到一些问题。
几年前,我使用 smartfox 服务器 1.6x,它的多线程模型使我能够在不同线程中处理连接的消息。该功能迫使我编写一些线程同步代码,以便正确处理所有消息。
现在我使用 netty,因为它对于我的目标来说是令人惊奇且非常有用的产品。
因此,我实现了一些基于服务器的逻辑。我的测试如下
我看到,在第一条消息(前十条)未处理之前(通常大约 30 秒的时间),第二包消息未在并行线程中处理。
<小时/>所以主要问题是:
netty 是否只在一个线程中处理一个连接的所有消息?如果是这样,我应该实现一些额外的代码来在不同的线程中执行此操作,还是单线程单连接模型运行良好?
<小时/>Netty 配置:
_boss = new NioEventLoopGroup(1);
_worker = new NioEventLoopGroup(8);
_bootstrap = new ServerBootstrap();
_bootstrap.group(_boss, _worker)
.channel(NioServerSocketChannel.class)
.childHandler(new NettyChannelInitializer())
.option(ChannelOption.SO_BACKLOG, 128)
.childOption(ChannelOption.SO_KEEPALIVE, true);
_bootstrap.bind(_port).sync();
NettyChannelInitializer:
private static final ExtentionHandler SharedExtentionHandler = new ExtentionHandler();
private static final EventExecutorGroup ExtentionEventThreadPool = new DefaultEventExecutorGroup(20);
public void initChannel(SocketChannel channel) throws Exception
{
ChannelPipeline pipeline = channel.pipeline();
pipeline.addLast(ExtentionEventThreadPool, "extention", SharedExtentionHandler);
}
最佳答案
Netty 确保同一 channel 的事件以有序的方式处理。也就是说,您永远不会遇到排序问题,但是当您处理的连接数只有一个时,您就无法利用并行性的优势。如果您接受无序执行,则可以简单地将任务委托(delegate)给可以从 JDK 获取的普通 ExecutorService
。
关于java - Netty只在一个线程中处理消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21908943/
我是一名优秀的程序员,十分优秀!