baidu / Jprotobuf-rpc-socket

Protobuf RPC是一种基于TCP协议的二进制RPC通信协议的Java实现
Apache License 2.0
525 stars 221 forks source link

是否有打算对reactive和连接多路复用等进行支持 #57

Open 759434091 opened 5 years ago

759434091 commented 5 years ago

Reactive Stack

基于Project Reactor 编程库和 Spring5 Reactive Stack 进行异步化的响应式编程。请问对于这一方面有支持的想法吗

服务端目前处理是基于业务线程池化,进行同步阻塞业务再提交task返回。 如果服务端使用Reactive Data、Reactive Redis、WebFlux WebClient开发,可能可以免去新建另外的业务线程池。数据仅仅通过切换Eventloop流动变化,解放线程,而不是在从业务线程池中的一条进行不断的阻塞等待。 (表述可能有误,未能讲明我的意思)

连接中多路复用

目前Rpc协议可以根据request&correlation_id 实现唯一标识。 对于同一个连接,Client可以同时发出多个不同的ServicePackage,Server亦可以乱序响应多个不同的ServicePackage。

客户端: 目前的ProtobufRpcProxy 受限于同步阻塞的方式,在一条线程上发送请求,然后开始doWaitCallback。这样处理感觉类似Jdbc,不过是在Netty的基础上强行在业务线程阻塞等待(根据callbackDone标志)。是否没有发挥出当先NIO和目前Rpc协议的最大优势。

这个是目前的Rpc协议以及其实现所支持的,不过似乎在最终提供给业务开发方层面却没能够这么做(Blocking+NonBlocking=Blocking)

预编译

目前预编译需要另外加插件和配置进行生成编解码的文件,使用File/OutputStream/Compiler/MiniTemplater进行相关实现。使用注解处理器会不会更加方便呢,特别是对于Spring boot fatJar来讲。

DEMO

根据你的源码。我大概编写出了一些实现的DEMO。目前对相关开发了解不深,写的比较挫 reactor-rpc4j jprotobuf-annotation-processor

jhunters commented 4 years ago

非常感谢反馈, reactor模式我们详细了解一下。
基于注解处理的确是友好一些, 也是不少开发者反馈使用asm来生成,提升效率,这个我们也会安排时间来分析一下