`

细数跨语言通信的选择

阅读更多

        对编程语言的选择的规则其实很简单,优先选用自己或者团队熟悉的语言,优先选择项目中用到开源产品稳定版本所用的语言。

        为了提高开发效率,需要融合不同语言。回顾以前项目中用到的几种不同语言间通信的几种方式:

一. XML-RPC 可能是应用最广泛的方法

        使用 HTTP 协议,通过向远程服务发送方法请求,获取处理结果。其中请求发送的内容为 XML 格式:

<?xml version="1.0"?>
<methodCall>
  <methodName>examples.getStateName</methodName>
  <params>
    <param>
        <value><i4>40</i4></value>
    </param>
  </params>
</methodCall>

        和XML-RPC 类型的还有 JSON-RPC ,顾名思义通信内容使用 JSON 格式。

        发送 XML-RPC 或者 JSON-RPC 请求可以简单的用 HTTP 发送拼接的请求内容,比如 PHP 中可以用 Curl 发送请求,接收处理结果。

 

二. SOAP也是使用 HTTP 协议进行通信

        SOAP 请求的例子:

POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 299

<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Header>
  </soap:Header>
  <soap:Body>
    <m:GetStockPrice xmlns:m="http://www.example.org/stock">
      <m:StockName>IBM</m:StockName>
    </m:GetStockPrice>
  </soap:Body>
</soap:Envelope>

        SOAP 和 XML-RPC 的主要区别在于可以通过调用远程 WSDL 文件获取远程服务的方法。而且扩展了对 HTTP HEADER 的使用。使用 .NET 可以轻松的创建一个 SOAP 服务以供调用。同 XML-RPC 一样,在 PHP 中可以用 CURL 直接发送 HTTP 请求。

 

三. Socket

        用 Socket 进行通信可能是最古老的方法,也是最高效的方式。

        以 PHP 为例发送 Socket 请求:

$s = @fsockopen('127.0.0.1', 1234);
fwrite($s, "addaiml\r\n");
$result= fgets($s, 10);
fclose($s);

        可以用几百行 JAVA 或者其他语言轻松创建一个简单的 Socket 服务来接收 Socket 请求。这里值得提出的是 memcache 的协议设计堪称典范,以前项目的的 Socket 协议设计都参考了 memcahe 的方式。

 

四. Message Queue

        通过消息队列来进行通信,可以用现有的 message queue 中间件产品比如支持异步处理的 gearman,或者更为强大的 Rabbit-MQ,  Zero-MQ。

        也可以在数据库中自己建立消息表,构建简单的生产者-消费者模式,服务端定时查询数据库中的未处理消息,处理完后对消息进行标定,请求端在表中插入新消息,并且定期查询消息的状态。

 

五. CLI

        这可能是比较土的调用其他服务的方式,虽然只支持同步的方式,但是也很有效,比如获取服务器的CPU MEMORY 等指标可以用这种方式。

        以 PHP 为例,一切在命令行使用的命令都可以通过 exec() 函数来调用,并且获取处理结果。扩展思维,一切能在命令行人工执行的命令,都可以通过此方式来执行。

 

PS:常见语言对于XML-RPC的支持库

Python: http://docs.python.org/library/xmlrpclib.html

C++: http://libiqxmlrpc.sourceforge.net/

Erlang: http://erlang.stacken.kth.se/contrib/xmlrpc-1.13.tgz

JAVA: http://ws.apache.org/xmlrpc/

.NET: http://www.xml-rpc.net/

PHP: http://phpxmlrpc.sourceforge.net/

Ruby: http://www.ruby-doc.org/stdlib/libdoc/xmlrpc/rdoc/index.html

 

文章来源:http://blog.eood.cn/cross_language_communication

分享到:
评论

相关推荐

    对象序列化_跨语言(C# )wox开源项目源码

    7. **跨语言通信**:wox项目源码可能使用了某种序列化技术来实现C#与其他语言(如Python、Java等)之间的数据交换。这通常涉及将C#对象序列化为一种通用格式(如JSON),然后在目标语言中反序列化。 8. **性能优化*...

    WCF通信协议 .net 跨平台 跨进程

    使用HTTP协议时,WCF服务可以作为Web服务被其他应用程序调用,从而实现跨平台、跨语言的服务交互。 - **优点**:广泛兼容、易于集成。 - **缺点**:性能相对较低,不适合大量数据传输。 ##### 2. TCP通信 除了...

    Visual C++ 串口通信技术与工程实践.pdf

    第二章“端口通信基础编程”详细讲解了如何使用C++语言进行基本的串口操作,包括打开、关闭串口,设置串口参数,以及读写数据的函数调用。这一章还可能涉及到错误处理和中断处理机制,使开发者能够编写出健壮的串口...

    数字选择控件

    在Web开发中,创建数字选择控件通常会用到JavaScript,这是一种强大的客户端脚本语言,能够实现动态效果和用户交互。JS数字选择控件可以用来替代传统的HTML `&lt;input type="number"&gt;`,通过自定义样式和交互方式,...

    HPSocket通信框架

    HPSocket通信框架是一款强大的网络通信库,专为开发者设计,以满足跨语言、跨平台的网络编程需求。其核心在于提供了一套高效、稳定且易用的接口,使得开发者能够轻松地处理TCP、UDP等各种网络通信协议。在本文中,...

    Android Binder通信案例

    在Android系统中,Binder是实现进程间通信(IPC, Inter-Process Communication)的关键机制,它允许不同进程间的对象互相调用方法,实现了跨进程的数据交换和服务交互。本篇将深入探讨如何利用Android Interface ...

    ZLG can通信二次开发

    总的来说,ZLG的CAN通信二次开发套件为开发者提供了跨平台的支持,无论是在Python、C#还是C++环境下,都能方便地接入CAN网络,实现设备间的通信。通过深入学习和实践这些开发资源,开发者可以有效地掌握CAN通信技术...

    在VS中使用DDS进行通信

    5. **QoS(Quality of Service)策略**:允许对通信性能进行细粒度的控制,如可靠性、时延、带宽等。 在“ShapeDemo”这个示例中,可能包含了以下内容: - **ShapeDemo** 可能是一个演示程序,展示如何通过DDS进行...

    浅析C语言在通信接口软件设计中的应用.pdf

    3. 跨平台特性:C语言的代码具有很好的可移植性,使得编写的通信接口软件能够在不同的操作系统和硬件平台上运行,这对于通信设备的广泛部署非常关键。 4. 资源控制:在通信接口的设计中,资源管理和控制是一项重要...

    python-ndis通信方法.doc

    Python作为一种强大的编程语言,可以通过多种方式与NDIS接口进行通信,以实现对网络数据包的捕获、分析和操控。以下将详细探讨四种主要的Python NDIS通信方法。 1. **使用pyWin32获取NDIS接口** pyWin32是一个...

    VB GPIB 通信

    例如,NI(National Instruments)公司的IVI(Interchangeable Virtual Instruments)基金会提供了一套全面的GPIB驱动程序,包括VISA(Virtual Instrument Software Architecture),它是跨平台的软件接口...

    细细品味C#编程系列教程-BY虾皮

    .NET Remoting是.NET Framework早期的分布式通信技术,允许跨进程或跨计算机的对象交互。"细细品味C#(Remoting专题).pdf"可能详细讲解了通道、激活方式、对象生存期管理等内容。 6. **Timer及多线程编程**: ...

    计算机网络与通信试题.doc

    17. JAVA是一种网络编程语言(C),常用于开发跨平台的应用程序。 18. SNMP(Simple Network Management Protocol,简单网络管理协议)建立在UDP上,提供不可靠的服务(A正确),SNMP2.0增加了安全性功能(C正确)...

    android 3个APK见的AIDL 通信

    如果需要持续连接,通常选择`bindService`,因为它提供了更细粒度的控制。 5. **创建AIDL客户端代理**:在A中,也需要创建一个`IBService.Stub`实例,作为调用B服务的代理。例如: ```java IBService binder = ...

    Java远程通信技术——Axis实战.doc

    展的延续,但在命名上,Sun 选择了一个全新的名字——JAX-WS (Java API for XML Web Services)。JAX-WS 是 JAX-RPC 的下...通过 Axis,开发者可以轻松地构建跨平台、跨语言的分布式应用,实现了基于 XML 的标准化通信。

    Facebook的服务器架构(组图).doc

    同时,Facebook还使用了多种其他语言(如C++、Erlang等)开发的后台服务,这些服务通过Thrift RPC(远程过程调用)进行跨语言通信。Thrift是一个轻量级的框架,用于构建可扩展的服务,Scribe,一个日志收集系统,也...

    微服务架构技术栈选型指南.docx

    Spring Boot的RESTful设计允许跨语言通信,但可能对客户端有较高的自定义需求。 - **Dubbo**:源自阿里的RPC框架,强调服务治理和性能,适合Java环境,通过Dubbox可以支持RESTful接口。但跨语言支持有限,适合内部...

    Zero Ice中文教程

    4. **跨语言通信**: 支持多种编程语言(如C++, Java, Python等),便于构建多语言环境下的应用程序。 **四、学习路径** 1. **基础概念**: 首先理解Ice的核心概念和组件,熟悉对象代理和接口设计。 2. **代码生成*...

Global site tag (gtag.js) - Google Analytics