`
gashero
  • 浏览: 962788 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

公司这边需要一套RPC框架,由于技术比较繁杂,包括Python、C++、C#,还有可能有Erlang。所以最佳方案莫过于Facebook的Thrift。用了几周时间研究,发现这个玩意文档非常差劲。最终我对Thrift的了解还是出于阅读了它关于Python的所有代码。

 

虽说Thrift支持技术广泛,不过其Python服务器相对比较落后,估计也是没太多人用。服务器有四种运行方式,Simple Server、Thread Server、ThreadPool Server、Fork Server。第一种就不用说了,一个迭代服务器,没法应用于产品环境。问题是后几种也很不方便,偶尔出现服务终止,而且也没法用daemon方式运行。问题解决的王道当然是引入Twisted。

 

Thrift中是有TTwisted.py模块的,不过里面的代码看得我一头雾水,明显就是恶搞么。整个通信协议有多种不同的头格式。可是其Twisted支持代码一律采用i32头+字符串方式来解析。结果自然是没法用。期间我还尝试自己写其Twisted的支持。用Greenlet来解决回调变同步的问题。不过正在写的时候,变故发生了。

 

我做后端,服务器端(也就是我的客户端)的同事因为他们服务器框架的问题需要我实现异步的调用和返回。也就是他发出请求以后要立即返回,然后回头再来轮询是否生成了结果。还有就是要求服务器要有能力推送通知到客户端。这两点是Thrift没法解决的,还有个问题就是Thrift的官方发行版本的C++运行时不支持Win32环境,而那些同事的应用服务器就是在Win32下运行的。

 

好了,长话短说,于是我们头提出要换ICE,我是百般的不爽,毕竟付出了很多心血的一个东西要这么被废掉。最终,今天,决定研究一下ICE方案的可行性。现在看来ICE框架支持的功能众多,不过同样如此让我想起CORBA这个噩梦。

 

刚才成功的在FreeBSD 7.2下用pkg_add方式安装了Ice了,明天再去试试。官方虽然没有提到支持FreeBSD,但是FreeBSD的源里面已经有二进制包了,看来成熟度还是符合要求的。

0
0
分享到:
评论
2 楼 cm2355 2010-03-02  
很想知道楼主对ICE的使用感受,因为我现在也在thrift和ICE之前徘徊
1 楼 yeaha 2009-06-17  
试试看phprpc
http://www.phprpc.org/

不要被名字误导了,它并不是phpxxxx类型的项目

相关推荐

    oncrpc.rar_RPC. VC++_oncrpc windows_windows RPC_ycnian的博客

    1. 客户端发送一个包含请求参数的RPC消息到服务器。 2. 服务器接收到请求后,解码参数并执行相应的函数。 3. 服务器执行完毕后,将结果编码成消息返回给客户端。 4. 客户端接收并解码结果,完成远程调用。 在...

    jsonrpc-c-master 基于 json rpc 1.0 纯C开发的服务端代码和示例

    1. **理解库API**: 阅读库的头文件和文档,了解如何初始化服务器、注册处理函数、接收和发送JSON-RPC消息。 2. **实现业务逻辑**: 编写处理特定RPC方法的函数,这些函数会被注册到服务器并响应客户端的请求。 3. **...

    android-json-rpc

    在Android开发中,有时我们需要与远程服务器进行数据交互,这时JSON-RPC客户端库就显得尤为重要。"android-json-rpc"正是这样一款专为Android平台设计的JSON-RPC库,它简化了开发者在Android应用程序中执行JSON-RPC...

    RPC的简单实现

    - **基于消息的RPC**:如AMQP(Advanced Message Queuing Protocol)上的RPC,通过消息队列实现异步RPC。 - **基于协议缓冲区的RPC**:如gRPC,使用Google的protobuf定义服务接口和数据结构,提供高性能、低延迟的...

    RPC 学习参考资料

    在RPC的工作流程中,通常包括十个步骤:客户端调用句柄、本地系统发送网络消息、消息传递到服务器、服务器处理消息、执行远程过程、返回结果到服务器句柄、服务器句柄通过内核返回结果、消息回传客户端、客户端句柄...

    实现一个简单的RPC框架

    RPC框架负责将这个调用转换成网络消息,并通过socket发送到服务器(Server)端。服务器接收到消息后,通过反射机制找到对应的函数,并执行该函数。执行完成后,服务器将结果序列化并回传给客户端,客户端再反序列化...

    RPC 实例,RPC实例

    2. **序列化与反序列化**:RPC调用涉及的数据需要在网络上传输,因此必须进行序列化,将对象转换为可传输的格式(如JSON、XML或二进制)。反之,服务器接收到数据后需要反序列化恢复成原对象。 3. **网络通信**:...

    jsonrpc-1.0.jar

    在实际开发中,`jsonrpc-1.0.jar` 可能会与其他Java库结合使用,例如HTTP客户端库(如Apache HttpClient)来处理HTTP通信,或者与JSON库(如Jackson或Gson)集成,以便于JSON对象的序列化和反序列化。 总的来说,`...

    消息推送中台websocket部分 + netty 手写 RPC

    本项目结合了WebSocket与Netty,旨在深入理解消息推送中台的实现原理以及RPC的底层机制。 首先,让我们详细讨论WebSocket。WebSocket是一种在客户端和服务器之间建立长连接的协议,与传统的HTTP协议不同,它允许...

    基于GXT的RPC与MVC实现登录和退出功能

    GXT提供了丰富的UI组件和强大的数据绑定机制,而RPC(Remote Procedure Call)和MVC(Model-View-Controller)模式是GXT中常用的设计模式和技术,用于处理客户端与服务器之间的通信以及应用的结构组织。本文将深入...

    后端java开发 - 大厂面试题 - 面试必胜宝典

    RPC与消息队列 6、设计模式 常用设计模式及其应用场景 代码重构与最佳实践 7、项目管理与开发流程 版本控制(Git) 持续集成与持续部署(CI/CD) 敏捷开发与Scrum 8、推荐使用方式 查漏补缺:使用这份面试题合集检查...

    JSON-RPC 2.0 规范(中文版)

    - **版本区分**:JSON-RPC 2.0 与 JSON-RPC 1.0 不完全兼容。2.0 版本通过在每个请求和响应中加入 "jsonrpc" 字段(值为 "2.0")来区分自身。 - **向后兼容性**:虽然 2.0 版本不完全兼容于 1.0 版本,但建议大多数 ...

    RPC 通信 通过 名称获取RPC服务端

    例如,在RPC框架如gRPC中,接口定义语言(IDL)如protobuf用于描述服务和消息类型。 3. **协议栈**:RPC实现通常涉及多个层次,包括网络传输层(如TCP或UDP)、序列化/反序列化层(如JSON、protobuf或XML)以及错误...

    JSON-RPC 1.0 & 2.0 in Python

    Python的JSON-RPC实现可以很好地与其他语言的JSON-RPC服务进行交互,因为JSON是一种通用的数据交换格式。 综上所述,理解JSON-RPC 1.0和2.0的基本概念、语法以及如何在Python中实现这些概念是至关重要的。通过掌握...

    protobuf-rpc-pro

    它可能包含了实现双向RPC的类和接口,开发者可以通过这些组件实现服务器到客户端的消息推送。 `lib`目录通常包含项目的库文件,这些文件可能是编译好的二进制形式,供其他项目作为依赖引用。在protobuf-rpc-pro中,...

    jsonrpc是一个基于Java的高性能开源RPC框架

    3. **双向通信**:JSON-RPC支持客户端和服务器之间的双向通信,即可以由客户端发起调用,也可以由服务器向客户端推送消息。 4. **错误处理**:JSON-RPC协议定义了标准的错误响应,使得客户端能够识别并处理服务端...

    分布式系统中的通信方式:RPC与RMI.pdf

    RPC背后的核心思想是隐藏通信细节,使得远程过程调用在形式上与本地过程调用无异。RPC的通信流程如下:客户端调用远程过程时,会将调用信息封装成消息发送给服务端;服务端收到消息后,由服务端存根解析消息并执行...

    json-rpc-python

    4. **错误处理**:JSON-RPC协议定义了一套标准的错误代码和消息,用于表示请求失败。json-rpc-python库会自动处理这些错误,并将它们转化为Python异常。 5. **批量操作**:JSON-RPC 2.0允许在单个HTTP请求中发送多...

    WSDL样式详解,soap中Rpc和Document的区别

    - **RPC/Encoded**:此样式将方法名映射为SOAP消息中的根元素,同时在SOAP消息中编码参数类型信息。WSDL示例中展示了`<soap:body use="encoded" ...>`,表示使用编码方式。这意味着服务调用看起来像远程过程调用,...

    javax.xml.rpc相关jar包

    - `javax.xml.rpc.Service`:这是服务端点接口的抽象基类,提供了与服务交互的基本方法,如获取操作的端点地址、获取消息处理器等。 - `javax.xml.rpc.ServiceException`:当服务访问过程中发生错误时抛出的异常。 -...

Global site tag (gtag.js) - Google Analytics