gpt4 book ai didi

java - 为什么 Netty 只给我来自 UDP 消息的 768 字节

转载 作者:搜寻专家 更新时间:2023-10-31 19:34:26 25 4
gpt4 key购买 nike

我已将“receiveBufferSize”选项设置为 1024,但出于某种原因,我在 messageReceived 中仍然只获得 768 字节。数据头表示发送的数据大小为1004。

下面是服务器的初始化代码:

public static void main(String[] args) throws Exception {
ConnectionlessBootstrap b = new ConnectionlessBootstrap(new NioDatagramChannelFactory());

// Options for a new channel
b.setOption("receiveBufferSize", 1024);
System.out.println(b.getOptions());

b.setPipelineFactory(new ChannelPipelineFactory() {

@Override
public ChannelPipeline getPipeline() throws Exception {
return Channels.pipeline(
new MyUDPPacketDecoder(),
new StdOutPrintHandler());
}
});

b.bind(new InetSocketAddress(myPort));
}

最佳答案

您需要设置一个附加选项 - receiveBufferSizePredictorFactory。

为了预测它需要分配多少空间来保存传入的消息,netty 使用了一个预测器来预测要分配的字节数。

有两种类型的接收缓冲区大小预测器,自适应和固定大小。预测器由预测器工厂创建,该工厂为 Bootstrap 创建的每个 channel 创建一个预测器。

如果没有为 bootstrap 设置预测器工厂(或者没有为 channel 手动设置预测器),则 channel 使用默认的 768 字节固定大小预测器。所有大于 768 字节的消息都被缩减到该大小。

你可以添加:

b.setOption("receiveBufferSizePredictorFactory", new FixedReceiveBufferSizePredictorFactory(1024));

您可以在 netty 文档中阅读有关预测器及其工厂的信息

ReceiveBufferSizePredictor Inteface

ReceiveBufferSizePredictorFactory Inteface

关于java - 为什么 Netty 只给我来自 UDP 消息的 768 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11525712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com