首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Netty:关于“丢弃”Netty示例的写索引

Netty:关于“丢弃”Netty示例的写索引
EN

Stack Overflow用户
提问于 2013-01-27 08:50:59
回答 1查看 432关注 0票数 0

这是netty源代码包中的一个示例,我打印写索引,测试一个客户端,我想知道

代码语言:javascript
复制
public class DiscardClientHandler extends SimpleChannelUpstreamHandler {
...
@Override
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) {
    // Send the initial messages.
    generateTraffic(e);
}
@Override
public void channelInterestChanged(ChannelHandlerContext ctx, ChannelStateEvent e) {
    // Keep sending messages whenever the current socket buffer has room.
    generateTraffic(e);
}

private void generateTraffic(ChannelStateEvent e) {
    // Keep generating traffic until the channel is unwritable.
    // A channel becomes unwritable when its internal buffer is full.
    // If you keep writing messages ignoring this property,
    // you will end up with an OutOfMemoryError.
    Channel channel = e.getChannel();
    while (channel.isWritable()) {
        ChannelBuffer m = nextMessage();
        if (m == null) {
            break;
        }
        channel.write(m);
    }
}

上面是克林特密码..。

代码语言:javascript
复制
public class DiscardServerHandler extends SimpleChannelUpstreamHandler {
    @Override
    public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
    // Discard received data silently by doing nothing.
ChannelBuffer cb = (ChannelBuffer) e.getMessage();
    transferredBytes += cb.readableBytes();

    System.out.println("-=-=- " + transferredBytes + "-=-" + cb.writerIndex() + "-=- " + e.getMessage().toString());
    }
-=-=- 679039232-=-65536-=- BigEndianHeapChannelBuffer(ridx=0, widx=65536, cap=65536)
-=-=- 679072768-=-33536-=- BigEndianHeapChannelBuffer(ridx=0, widx=33536, cap=33536)
-=-=- 679105792-=-33024-=- BigEndianHeapChannelBuffer(ridx=0, widx=33024, cap=33024)
...
-=-=- 679298816-=-256-=- BigEndianHeapChannelBuffer(ridx=0, widx=256, cap=256)
-=-=- 679299072-=-256-=- BigEndianHeapChannelBuffer(ridx=0, widx=256, cap=256)
-=-=- 679299328-=-256-=- BigEndianHeapChannelBuffer(ridx=0, widx=256, cap=256)
...
-=-=- 679600640-=-65536-=- BigEndianHeapChannelBuffer(ridx=0, widx=65536, cap=65536)
-=-=- 679634176-=-33536-=- BigEndianHeapChannelBuffer(ridx=0, widx=33536, cap=33536)
-=-=- 679640576-=-6400-=- BigEndianHeapChannelBuffer(ridx=0, widx=6400, cap=6400)
....

我测试了一个客户,我想知道:

  1. 为什么writeIndex有时是256个,有时是65536?
  2. 为什么最大的是65536?

私有ChannelBuffers.wrappedBuffer(content);//content (){返回ChannelBuffer大小为256 }我想要一个客户端使用相同的通道缓冲区,写索引增加序列?我说的对吗?

EN

回答 1

Stack Overflow用户

发布于 2013-01-27 10:23:35

这取决于读取操作能够“读取”多少数据。所以它可以一直不一样。65536是64k,这很可能是您的应用程序的RECV_BUF大小,所以它是“最大值”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14545847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档