Thrift --- 支持双向通讯

【问题】架构

 

Thrift采用了C/S模型,不支持双向通讯:client只能远程调用server端的RPC接口,但client端则没有RPC供server端调用,这意味着,client端可以主动与server端通讯,但server端不能主动与client端通讯而只能被动地对client端的请求做出应答。这种RPC模式在某些应用中存在缺陷,好比:有些应用,在大部分状况下,client端会主动向server端发请求或者向server端发送数据,而在少部分状况下,server端也须要主动向client发送一些命令,告知进行某些操做。异步

(什么是Thrift,可参考:Thrift架构介绍socket

为了解决该问题,一般有三种方案可供选:.net

方案一:轮询(可选)server

该方案很容易想到:client端周期性地向server端询问是否须要进行某些操做,若是须要,则什么也不作,若是须要,则按照server的应答(response)要求进行操做。该方案的不足是延迟较大、且会浪费大量资源,形成没必要要的访问开销。blog

方案二:双client/server(推荐)接口

通讯双方都既是client,也是server。该方案须要在通讯双方之间创建两个通讯通道,开启两个端口,这比较繁琐,且很不优雅。但还是目前广泛采用的一套方案。资源

client/server <————————-> client/serverget

方案三:异步共享通道(不推荐)it

Thrit底层其实是socket,而socket是支持双向传输的,所以,咱们彻底能够经过修改thrift自己实现双向传输。有兴趣的读者可参考:

http://blog.csdn.net/qq_27989757/article/details/50725973

相关文章
相关标签/搜索