当前位置:首页 > 开发 > 开源软件 > 正文

让Thrift支持双向通信

发表于: 2014-07-27   作者:aoyouzi   来源:转载   浏览次数:
摘要: 【问题】   Thrift采用了C/S模型,不支持双向通信:client只能远程调用server端的RPC接口,但client端则没有RPC供server端调用,这意味着,client端能够主动与server端通信,但server端不能主动与client端通信而只能被动地对client端的请求作出应答。这种RPC模式在某些应用中存在缺陷,比如:有些应用,在大部分情况下,client端

【问题】

 

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

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

为了解决该问题,通常有三种方案可供选:

方案一:轮询

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

方案二:双client/server

通信双方都既是client,也是server。该方案需要在通信双方之间建立两个通信通道,开启两个端口,这比较繁琐,且很不优雅。但仍是目前普遍采用的一套方案。

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

方案三:异步共享通道

Thrit底层实际上是socket,而socket是支持双向传输的,因此,我们完全可以通过修改thrift本身实现双向传输。有兴趣的读者可参考:

http://joelpm.com/2009/04/03/thrift-bidirectional-async-rpc.html

让Thrift支持双向通信

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
早前,在我的博文thrift多平台安装介绍了如何在debian/ubuntu下面安装thrift,并支持erlang开发的。
2 thrift
一、About thrift 二、什么是thrift,怎么工作? 三、Thrift IDL 四、Thrift Demo 五、Thrift 协议
Thrift实例 Apache thrift是 Facebook 实现的一种高效的、支持多种编程语言的远程服务调用的框架。
Thrift 是一个创建夸语言、可伸缩服务的框架。Thrift 最初由Facebook 研发,并捐献给Apache 以求更
1、前言 Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项
背景:公司要用Node与其他语言(Java)写的服务通信。 1,服务端 helloServer.js var thrift = requ
thrift作为脱胎于facebook的rpc框架,各方面都非常优秀。清晰的分层设计,多语言的支持,以及不输pr
thrift --gen csharp search.thrift thrift --gen java search.thrift Thrift是facebook的一个技术
1. 内容概要 本文档比较全面的介绍了thrift(关于thrift框架的介绍,参考我这篇文章:Thrift框架介
Apache Thrift 学习 http://smallmin.iteye.com/blog/1121085 博客分类: 综合技术 Apache Thrift
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号