Rogan: Yes. you are right, original ChannelShapingHandler implement the rate control by delaying the read/write operations.
I think both ways are the same if you have large amount data to transfer. The average rates under both approaches should be similar. 在 2017年6月13日星期二 UTC+8下午9:27:21,Rogan Dawes写道: > > 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] > <javascript:>> 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] <javascript:>. >> 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/12f769f8-e6f2-42c8-b568-45ed4ff10046%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
