Closed funky-eyes closed 7 months ago
The recent modifications enhance the functionality of the RemotingContext
class by introducing new methods that encapsulate the write
and flush
operations. This update improves the code's readability and structure, making it more maintainable and clear.
File Path | Change Summary |
---|---|
src/.../RemotingContext.java |
Added methods for write and flush operations, improved code structure. |
🐇✨ In the land of code, where the bits roam free, A rabbit hopped in, with changes to see. "Write and flush," it said with glee, "Let’s wrap them up, more clearly to be!" Now the code flows smooth, like a gentle sea. 🌊 🐇✨
src/main/java/com/alipay/remoting/RemotingContext.java (3)
`108-109`: LGTM! The `writeAndFlush` method is well-implemented and documented. --- `116-122`: LGTM! The `write` method is correctly implemented and documented, aligning with the PR's objectives. --- `126-130`: Consider enhancing the documentation for the `flush` method to explain what flushing the channel does, which could be helpful for maintainability and clarity.
我觉得使用 ctx#getChannelContext 挺好的,这代表你已经使用了 Netty 的特性了, 超出了bolt 的范畴. 减少了误用RemotingContext 的可能性
我觉得使用 ctx#getChannelContext 挺好的,这代表你已经使用了 Netty 的特性了, 超出了bolt 的范畴. 减少了误用RemotingContext 的可能性
如果是这样的设计,为什么还要对外单独开放一个writeAndFlush呢?我觉得如果要做的比较合理,比如屏蔽一些容易误操作的功能,应该把可用功能开放,风险高的功能封闭,或者框架层调优,无需用户去感知。
在我看来, writeAndFlush 并不是一个高风险的方法; 但是 write 和 flush 的组合就是一个比较容易出错的组合. Bolt 屏蔽了很多 Netty 的细节, 所以我们也不能默认 Bolt 的使用者对于 netty 很熟悉, 分别引入 write 和 flush 方法的必要性不是很大.
而且现在我们有替代的方法 ctx.getChannelContext().write()
和 ctx.getChannelContext().flush()
我觉得这已经足够了.
看了下,感觉每个人理解不一样,我是感觉RemotingContext这里不应该提供getChannelContext方法,而是把必要的方法、属性按需开放出来更合理,我看代码里这个方法基本都是为了获取远程地址String remotingAddress = RemotingUtil.parseRemoteAddress(ctx.getChannelContext() .channel());
https://github.com/funky-eyes/redispike-proxy 自己写的一个解析redis协议写入aerospike的代理程序,依赖sofa-bolt。支持redispippline时,需要批量响应,接收N个消息后,需要最后一个消息写完再flush,而sofa-bolt目前无法直接调用到write和单独的flush故此pr开放相关功能,并且利用这个功能,理论上也可以优化吞吐量,比如dubbo3.2的10倍性能提升就是通过先投入内存队列,然后异步从队列pop,将队列中同一时刻的请求全部先write,然后执行flush。 直接使用ctx#getChannelContext 粒度有点大,也不太优雅
Summary by CodeRabbit