【问题标题】:About UDP server setting in netty关于netty中的UDP服务器设置
【发布时间】:2013-01-15 19:55:20
【问题描述】:

现在我正在实现 UDP 服务器以使用 netty 库收集 sflow 数据报。

这是我对 udp 服务器的设置。

ChannelFactory factory = new NioDatagramChannelFactory(this.threadPool.getScheduledExecutor());
    ConnectionlessBootstrap bootstrap = new ConnectionlessBootstrap(factory);
    bootstrap.setPipelineFactory(new ChannelPipelineFactory(){
        public ChannelPipeline getPipeline(){
            ChannelPipeline lChannelPipeline = Channels.pipeline();
            lChannelPipeline.addLast("sflowmessagedecoder", new SflowMessageDecoder());
            lChannelPipeline.addLast("handler", new SflowCollectorHandler());

            return lChannelPipeline;
        }
    });

    bootstrap.setOption("receiveBufferSize", 65536);
    bootstrap.bind(new InetSocketAddress(port));

问题是当我收到一个sflow数据报(大约1300字节长,可以使用wireshark检查)时,netty只读取了大约700字节,这可以通过channelbuffer的大小来检查,来自channelbuffer的数据报。

但是,我使用 java.net.* 库如 DatagramSocket.class 和 DatagramPacket.class,它可以正确接收 sflow 数据报(大约 1300 字节)。

有人可以帮助我吗?因此,我无法正确解析 sflow 数据报。

谢谢。

【问题讨论】:

    标签: netty


    【解决方案1】:

    我有同样的问题,尝试使用 Oio 而不是 Nio! (只需将“nio”更改为“oio”,将“Nio”更改为“Oio”即可。

    http://lists.jboss.org/pipermail/netty-users/2009-June/000891.html

    现在它正在工作;)

    【讨论】:

      【解决方案2】:

      我没有对此进行测试,但试一试,可能对你有用。

      org.jboss.netty.channel.FixedReceiveBufferSizePredictorFactory bufferSizePredictor = new FixedReceiveBufferSizePredictorFactory(1300);// or whatever size you require.
      serverBootstrap.setOption("receiveBufferSizePredictorFactory",
                  bufferSizePredictor);
      

      一旦你设置了这个预测器工厂,它可能会有所帮助。

      【讨论】:

        猜你喜欢
        • 2011-01-22
        • 1970-01-01
        • 2019-03-26
        • 1970-01-01
        • 1970-01-01
        • 2012-11-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-27
        相关资源
        最近更新 更多