NioServerSocketChannel.doReadMessages() 创建一个忽略用户 ChannelOptions 的 NioSocketChannel 实例
NioServerSocketChannel.doReadMessages() creates a NioSocketChannel instance ignoring user ChannelOptions
NioServerSocketChannel.doReadMessages() 创建一个忽略用户定义的 ChannelOptions 的 NioSocketChannel 实例。
ServerBootstrap 和 Bootstrap 类 通过调用 [=19= 创建频道]AbstractBootstrap.initAndRegister() 方法。
Bootstrap.connect() 和 ServerBootstrap.bind() 调用方法 AbstractBootstrap.initAndRegister( ) - AbstractBootstrap.init() 最终设置用户定义的通道配置选项,例如自定义分配器。
尽管客户端通道 (Bootstrap.connect()) 和服务器监听通道 (ServerBootstrap.bind()), 当一个服务器接受一个连接方法时 NioServerSocketChannel.doReadMessages() 被触发,这个方法只是创建一个新的 NioSocketChannel 而没有对其频道配置进行任何更改。因此,这个新频道的选项将始终为默认值,所有用户设置都将被完全忽略。
例如,这使得无法设置自定义缓冲区分配器,因为尽管 NioServerSocketChannel 本身将具有由 [=19= 设置的正确分配器]ServerBootstrap.initAndRegister(),服务器上的通道将使用错误的 NioServerSocketChannel.doReadMessages() 方法创建,并且始终附加默认分配器.
这适用于任何其他 ChannelOption。无论用户设置什么,这些频道的整个选项配置将始终是默认设置。
非常感谢Ferrybig!
问题是,要为 ServerBootstrap 设置自定义分配器,需要以下内容:
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.option(ChannelOption.ALLOCATOR, alloc)
.childOption(ChannelOption.ALLOCATOR, alloc);
NioServerSocketChannel.doReadMessages() 创建一个忽略用户定义的 ChannelOptions 的 NioSocketChannel 实例。
ServerBootstrap 和 Bootstrap 类 通过调用 [=19= 创建频道]AbstractBootstrap.initAndRegister() 方法。 Bootstrap.connect() 和 ServerBootstrap.bind() 调用方法 AbstractBootstrap.initAndRegister( ) - AbstractBootstrap.init() 最终设置用户定义的通道配置选项,例如自定义分配器。
尽管客户端通道 (Bootstrap.connect()) 和服务器监听通道 (ServerBootstrap.bind()), 当一个服务器接受一个连接方法时 NioServerSocketChannel.doReadMessages() 被触发,这个方法只是创建一个新的 NioSocketChannel 而没有对其频道配置进行任何更改。因此,这个新频道的选项将始终为默认值,所有用户设置都将被完全忽略。
例如,这使得无法设置自定义缓冲区分配器,因为尽管 NioServerSocketChannel 本身将具有由 [=19= 设置的正确分配器]ServerBootstrap.initAndRegister(),服务器上的通道将使用错误的 NioServerSocketChannel.doReadMessages() 方法创建,并且始终附加默认分配器. 这适用于任何其他 ChannelOption。无论用户设置什么,这些频道的整个选项配置将始终是默认设置。
非常感谢Ferrybig!
问题是,要为 ServerBootstrap 设置自定义分配器,需要以下内容:
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.option(ChannelOption.ALLOCATOR, alloc)
.childOption(ChannelOption.ALLOCATOR, alloc);