情况:考虑到telnet客户端
这是Netty 4!
通道处理程序在一段时间内阻塞线程,而不是echo回复消息(就像telnet服务器演示所做的那样)(在现实世界中,像JDBC或JSch,...).
try { Thread.sleep(3000); } catch (InterruptedException e) {};
future = ctx.write("Task finished at " + new Date());
future.addListener(ChannelFutureListener.CLOSE);
这实际上是可行的:我正在用echo“Hello”|nc-localhost$port)
测试它,线程将被阻塞(并且nc
waitis),直到3秒钟后返回。
然而,这意味着我正在用一个不相关的任务阻塞Netty的事件循环工作组的线程。
因此,我更改了频道注册并应用了自定义执行器:
public class TelnetServerInitializer extends ChannelInitializer<SocketChannel> {
private static final StringDecoder DECODER = new StringDecoder();
private static final StringEncoder ENCODER = new StringEncoder();
private TelnetServerHandler serverHandler;
private EventExecutorGroup executorGroup;
public TelnetServerInitializer() {
executorGroup = new DefaultEventExecutorGroup(10);
serverHandler = new TelnetServerHandler();
}
@Override
protected void initChannel(final SocketChannel ch) throws Exception {
ChannelPipeline pipeline = ch.pipeline();
pipeline.addLast("framer", new DelimiterBasedFrameDecoder(
8192, Delimiters.lineDelimiter()));
pipeline.addLast("decoder", DECODER);
pipeline.addLast("encoder", ENCODER);
// THIS!
pipeline.addLast(executorGroup, "handler", serverHandler);
}
}
不幸的是,在此配置后,套接字将在退出处理程序的< code>channelRead0()后立即关闭。我可以看到任务本身将被处理,包括调用处理程序的事件方法。但是相应的通道已经与客户端断开连接(我的< code>nc命令已经退出)。
整合另一个执行者是如何工作的?我是否遗漏了一个细节?
您的网络服务器正在按预期工作,这是回显|您正在测试的nc命令正在提前退出。
尝试使用“telnet localhost 3000”与您的测试服务器进行交互会话,输入一些文本,您将看到在延迟后会写入正确的响应,然后通道关闭。
或者只需使用“nc -v -w10 localhost 3000”,写一些文本,按回车键,在延迟和频道关闭后,您再次看到预期的输出。
我正在使用以下项目结构 子模块包含在设置中。gradle,并在内部版本中配置。根项目的渐变。 我有3个任务要做 (每个子项目都有这个) (这是每个子项目都需要自己工作的打包机制) (这只需要调用一次) 我想能够打电话 $gradle部署 build.gradle
我正在使用Spring Cloud Data Flow来协调任务应用程序的执行,并且需要用它自己的资源配额(有些可能是有保证的,有些是不稳定的)在它的专用名称空间中运行每个任务应用程序。 按照Spring Cloud Data Flow Tasks Configuration中的指南,并使用timestamp-task docker映像,我在中有以下配置 但是,当我使用参数启动任务时,任务仍然在运
我有代码: 年级4.5.1对此警告为 但是link没有给我任何可以替换它的提示,因为我不能仅仅设置任务依赖项,比如dependsOn或FinalizdBy--它不是从其他任务调用的,而是从构建的末尾调用的。
在我的用例中,我有一个带有Reactor Netty的Spring Webflux微服务,我有以下依赖项: null 由于(版本0.7.6版)已包含在最新的(版本2.0.1版)中,因此不能再使用:,请参阅->https://github.com/reactor/reactor-netty/issues/312 我的代码段: 这适用于版本2.0.0.release,但由于升级到版本2.0.1.rel
请注意:虽然我更喜欢使用Akka的JavaAPI的解决方案(这就是我正在使用的),但我对任何工作解决方案都很满意,并且可能会想出如何将基于Scala的答案翻译成Java。 我有一个Akka应用程序,有很多演员,其中两个是和。actor可以接受两种类型的消息: ;和 执行器简单地接受一条消息。这些参与者和系统其他部分之间的消息流如下: 任何东西(其他参与者,甚至参与者系统之外的事件驱动组件)都可以随
我有一个需要执行一些业务逻辑的处理程序,我希望它在单独的线程池中执行,以不阻塞io事件循环。我已将DefaultEventExecutorGroup添加到管道中,如http://netty.io/4.0/api/io/netty/channel/ChannelPipeline.htmljavadoc和http://netty.io/wiki/new-and-noteworthy-in-4.0.ht