我使用的是Netty版本2.6.0.Final.
如果我正确理解Netty文档,在Channel上调用disconnect()应该允许我稍后再调用connect()来连接.但是,当我调用disconnect()时,我的SimpleChannelHandler子类的channelDisconnected()和channelClosed()都被调用.
我在调试模式下打开它,基本上事件的顺序是:
调用Channels.disconnect():
public static ChannelFuture disconnect(Channel channel) {
ChannelFuture future = future(channel);
channel.getPipeline().sendDownstream(new DownstreamChannelStateEvent(
channel, future, ChannelState.CONNECTED, null));
return future;
}
Run Code Online (Sandbox Code Playgroud)最终,NioSocketPipelineSink.eventSunk()被调用,相关部分是:
case CONNECTED:
if (value != null) {
connect(channel, future, (SocketAddress) value);
} else {
channel.worker.close(channel, future);
}
break;
Run Code Online (Sandbox Code Playgroud)因此,由于value为null且状态为CONNECTED,因此通道将关闭(尽管根据此处 CONNECTED with null应指示断开连接的请求,不一定关闭.
我在这里错过了一些东西吗?如果它只是导致通道被关闭,那么disconnect()的重点是什么?
这不是一个大问题,因为如果我需要,我可以为我的情况创建一个新的频道,但从最初的检查看起来这似乎是一个Netty错误,除非我只是误解了它应该如何工作或我'做一些傻事.
使用Apache HTTP组件作为客户端与在Tomcat服务器上运行的Web应用程序通信时,我在cookie管理方面遇到了一些问题。长话短说,我发现这是由于使用版本0的Set-Cookie标头导致的,默认情况下,这会导致HTTP组件使用不同的逻辑流并忽略没有域后缀的主机地址。尽管我可以通过更改cookie策略轻松解决此问题,但总体上我对cookie版本感到好奇。我似乎找不到太多有关这些天Web服务器默认应使用哪个版本的信息。出于兼容性考虑,Tomcat似乎默认为版本0。我不应该将其配置为使用版本1或2,还是有理由退出该版本?我不确定是否有任何安全性/兼容性/功能方面的隐患,还是根本就没有太大关系。我想它正在使用版本0与旧的浏览器兼容,我们还是不支持旧的浏览器。
在Spring Batch的分区之间的关系gridSize的的PartitionHandler和数量的ExecutionContext通过传回的分区程序是有点混乱。例如,MultiResourcePartitioner声明它忽略 gridSize,但Partitioner文档没有解释何时/为什么可以接受。
例如,假设我有一个taskExecutor我想在不同的并行步骤中重复使用的对象,并且我将其大小设置为 20。如果我使用网格大小为 5的TaskExecutorPartitionerHandler,并且一个MultiResourcePartitioner返回任意数量的分区(每个文件一个),并行性实际上会如何表现?
假设MultiResourcePartitioner为特定运行返回 10 个分区。这是否意味着一次只执行其中的 5 个,直到所有 10 个都完成,并且这 20 个线程中不会有超过 5 个用于此步骤?
如果是这种情况,何时/为什么可以在Parititioner使用自定义实现覆盖时忽略 'gridSize' 参数?我认为如果在文档中对此进行了描述会有所帮助。
如果不是这种情况,我该如何实现?也就是说,我如何重新使用任务执行器并分别定义可以为该步骤并行运行的分区数量以及实际创建的分区数量?