It's an interesting question, I guess. Reading the docs for the class, I get the sense that it is implemented at quite a high level, in that it simply writes the message it gets, then waits for a suitable amount of time to pass before it will write another, based on the size of the blob.
I would have thought that it would make more sense to simply write smaller chunks more frequently, in order to have a more continuous stream, at the desired rate. That should be achieveable by taking in a ByteBuf, then writing e.g. 1/10th of the bandwidth's bytes every 1/10th of a second until the ByteBuf is empty, then triggering channelWritabilityChanged(). And similarly, on receipt of a ByteBuf, pass on chunks of it with slices of the ByteBuf at the defined rate until the ByteBuf is consumed, then call read() again. Rogan On Tue, Jun 13, 2017 at 2:40 PM Zhaojie Niu <[email protected]> wrote: > Rogan: > > Thanks. I will try it and let you know once I solve it. > > 在 2017年6月13日星期二 UTC+8下午7:28:37,Rogan Dawes写道: >> >> This might help: >> >> >> https://stackoverflow.com/questions/34326230/how-to-use-channeltrafficshapinghandler-in-netty-4 >> >> Rogan >> >> On Tue, Jun 13, 2017 at 1:20 PM Zhaojie Niu <[email protected]> wrote: >> > Hi All: >>> >>> I am trying to control the network read/write speed with >>> ChannelTrafficShapingHandler provided by Netty. >>> >>> >>> In TransportContext.java >>> >>> I modify it as below: >>> >>> public TransportChannelHandler initializePipeline( >>> SocketChannel channel, >>> RpcHandler channelRpcHandler) { >>> try { >>> // added by zhaojie >>> logger.info("want to try control read bandwidth on host: " + host); >>> final ChannelTrafficShapingHandler channelShaping = new >>> ChannelTrafficShapingHandler(50, 50, 1000); >>> >>> TransportChannelHandler channelHandler = createChannelHandler(channel, >>> channelRpcHandler); >>> >>> channel.pipeline() >>> .addLast("encoder", ENCODER) >>> .addLast(TransportFrameDecoder.HANDLER_NAME, >>> NettyUtils.createFrameDecoder()) >>> .addLast("decoder", DECODER) >>> .addLast("channelTrafficShaping", channelShaping) >>> .addLast("idleStateHandler", new IdleStateHandler(0, 0, >>> conf.connectionTimeoutMs() / 1000)) >>> // NOTE: Chunks are currently guaranteed to be returned in the >>> order of request, but this >>> // would require more logic to guarantee if this were not part >>> of the same event loop. >>> .addLast("handler", channelHandler); >>> >>> >>> I create a ChannelTrafficShapingHandler and register it into the >>> pipeline of the channel. I set the write and read speed as 50kb/sec in the >>> constructor. >>> Except for it, what else do I need to do? >>> >>> However, it does not work. Is this idea correct? Am I missing something? >>> >>> Is there any better way ? >>> >>> Thanks. >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Netty discussions" group. >>> >> To unsubscribe from this group and stop receiving emails from it, send an >>> email to [email protected]. >> >> >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/netty/a6ce7d8a-4ef7-4f53-a8e9-fe407253ade0%40googlegroups.com >>> <https://groups.google.com/d/msgid/netty/a6ce7d8a-4ef7-4f53-a8e9-fe407253ade0%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> For more options, visit https://groups.google.com/d/optout. >>> >> -- > You received this message because you are subscribed to the Google Groups > "Netty discussions" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/netty/ecbe50f6-2da1-4afc-b3bf-6513fcef3593%40googlegroups.com > <https://groups.google.com/d/msgid/netty/ecbe50f6-2da1-4afc-b3bf-6513fcef3593%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Netty discussions" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/netty/CAOYdKdj2OPLOotnh7J%2BRCDSLQFvSgDPcOn%2BXELoExRB%3DE8KJYg%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
