公司这边需要一套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的源里面已经有二进制包了,看来成熟度还是符合要求的。
分享到:
相关推荐
JSON-RPC 2.0 规范(中文版)。 JSON-RPC是一个无状态且轻量级的远程过程调用(RPC)协议。...它允许运行在基于socket,http等诸多不同消息传输环境的同一进程中。其使用JSON(RFC 4627)作为数据格式。
1. 基于socketio实现websocket长链接 2. 基于原生netty实现rpc通讯 项目实现包含了消息推送关键理念,及DubboRPC通讯底层关键概念
c#自带remote,入门级demo,看看即可。。。个人看法:分布式中,用rpc真不如异步消息队列。。。
数组和指针、管道、绑定和句柄、内存管理、串行化服务、安全、安装和配置RPC应用程序、弃步RPC、RPC 消息队列、使用HTTP的远程过程调用、RPC参考手册、Windows 连网等若干内容。本书详尽细致、深入浅出地引导读者...
在客户端模块中,使用GO语言、jsonrpc库完成服务端接口调用,接收服务端的通知消息,并完成通知消息的处理。
DeFiBus=RPC+MQ,是基于开源消息中间件打造的安全可控的分布式金融级消息总线。DeFiBus不仅提供了RPC同步调用,还提供了MQ的异步事件通知、事件组播和广播等常用服务调用和消息模式,同时增加了应用多中心多活、服务...
利用RPC远程攻击Windows Remote Procedure Call (RPC)是Windows 操作系统使用的一种远程过程调用协议。...这些漏洞是由于不正确处理畸形消息所致,攻击者通过向目标发送畸形RPC DCOM请求来利用这些漏洞。
C1 与 S1 (C1客户端 S1服务端) 约定了RPCParamter.java 该类、并且S1为C1提供了调用接口文档。比如说,S1给C1 这么一个接口文档,C1只需要远程调用这些方法就行了,通过RPCParamter来传递消息给服务端,服务端在...
messagepack-rpc TCP上的RPC。 目前,此实现仅支持TCP,但计划是支持多种传输方式(UDP,UNIX域套接字等)。 MessagePack-RPC协议规范 参考: : 该协议由“请求”消息和相应的“响应”消息组成。 服务器必须发送...
RPC(Remote Procedure Call,远程过程调用)是一种计算机通信协议,它允许一个程序请求另一个地址空间(通常是远程计算机上的程序)执行代码,并等待结果返回。RPC使得程序能够像调用本地函数一样调用位于远程...
CAT 作为服务端项目基础组件,提供了 Java, C/C++, Node.js, Python, Go 等多语言客户端,已经在美团点评的基础架构中间件框架(MVC框架,RPC框架,数据库框架,缓存框架等,消息队列,配置系统等)
simple-jsonrpc-js 客户端和服务器。 支持websocket和http。 完全支持JSON-RPC 2.0(包括自动递增的请求ID) 最初由创建。 () ( )编写的一些更新 浏览器快速入门 为了在浏览器中使用,您可以从CDNSwift将其...
北京在本技巧中,IBM开发人员RussellButek向我们介绍了JAX-RPC,这是一种JavaAPI,有了它,应用程序不需要理解SOAP消息传递协议的细节,就可以与Web服务通信。Web服务的基础之一是互操作性。意思是说Web服务相互之间...
背景---------- JSON... RPC 数据包通常传递一个相关 id 以匹配对原始调用的响应、标识应发送响应的消息队列的响应队列名称,以及保存一个或多个支持协议格式的消息的值(这里我们处理的是JSONRPC协议)。 JSON
accelio, IO 消息和RPC加速库 Accelio - 开源 IO,消息和RPC加速库什么是 Accelio?Accelio提供了一个 easy-to-use 。可以靠。可以扩展和高性能的数据/消息传递中间件,可以以降低现代CPU和网络的time-to-market 。
python—rpc框架,基于ws长连接暴露RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如...
基于 ZMQ 的简单的类似 RPC 的消息传递库。 有关更多示例,请查看包含集成测试的 tests.py 文件。 基本示例 import smite host = '127.0.0.1' port = 3000 def echo ( text ): return text servant = smite . ...
客户端支持指定JSON-RPC消息标识符。 客户端支持指定JSON-RPC兼容性级别。 客户端支持使用请求和响应HTTP标头。 客户端支持gzip , DEFLATE和Brotli响应编码。 客户端支持使用自定义HTTP消息调用程序。 客户端...
grain是一个极简的、组件式的RPC框架,灵活且适合渐进学习,可与任何框架整合。同时包含系统通用多线程模型与消息通讯、多对多关系的分布式锁、基于Servlet的HTTP框架、基于系统通用多线程模型的Websocket框架、支持...
如果您想忽略标准以获得更好的性能,则可以调用noRpc()方法来防止从所有消息中发送jsonrpc: '2.0'开销。 使用changeSocket()和listenMessages()方法将RpcWebSocketClient与已经存在的WebSocket连接的选项。 如果您...