对编程语言的选择的规则其实很简单,优先选用自己或者团队熟悉的语言,优先选择项目中用到开源产品稳定版本所用的语言。
为了提高开发效率,需要融合不同语言。回顾以前项目中用到的几种不同语言间通信的几种方式:
一. 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
相关推荐
7. **跨语言通信**:wox项目源码可能使用了某种序列化技术来实现C#与其他语言(如Python、Java等)之间的数据交换。这通常涉及将C#对象序列化为一种通用格式(如JSON),然后在目标语言中反序列化。 8. **性能优化*...
使用HTTP协议时,WCF服务可以作为Web服务被其他应用程序调用,从而实现跨平台、跨语言的服务交互。 - **优点**:广泛兼容、易于集成。 - **缺点**:性能相对较低,不适合大量数据传输。 ##### 2. TCP通信 除了...
第二章“端口通信基础编程”详细讲解了如何使用C++语言进行基本的串口操作,包括打开、关闭串口,设置串口参数,以及读写数据的函数调用。这一章还可能涉及到错误处理和中断处理机制,使开发者能够编写出健壮的串口...
在Web开发中,创建数字选择控件通常会用到JavaScript,这是一种强大的客户端脚本语言,能够实现动态效果和用户交互。JS数字选择控件可以用来替代传统的HTML `<input type="number">`,通过自定义样式和交互方式,...
HPSocket通信框架是一款强大的网络通信库,专为开发者设计,以满足跨语言、跨平台的网络编程需求。其核心在于提供了一套高效、稳定且易用的接口,使得开发者能够轻松地处理TCP、UDP等各种网络通信协议。在本文中,...
在Android系统中,Binder是实现进程间通信(IPC, Inter-Process Communication)的关键机制,它允许不同进程间的对象互相调用方法,实现了跨进程的数据交换和服务交互。本篇将深入探讨如何利用Android Interface ...
总的来说,ZLG的CAN通信二次开发套件为开发者提供了跨平台的支持,无论是在Python、C#还是C++环境下,都能方便地接入CAN网络,实现设备间的通信。通过深入学习和实践这些开发资源,开发者可以有效地掌握CAN通信技术...
5. **QoS(Quality of Service)策略**:允许对通信性能进行细粒度的控制,如可靠性、时延、带宽等。 在“ShapeDemo”这个示例中,可能包含了以下内容: - **ShapeDemo** 可能是一个演示程序,展示如何通过DDS进行...
3. 跨平台特性:C语言的代码具有很好的可移植性,使得编写的通信接口软件能够在不同的操作系统和硬件平台上运行,这对于通信设备的广泛部署非常关键。 4. 资源控制:在通信接口的设计中,资源管理和控制是一项重要...
Python作为一种强大的编程语言,可以通过多种方式与NDIS接口进行通信,以实现对网络数据包的捕获、分析和操控。以下将详细探讨四种主要的Python NDIS通信方法。 1. **使用pyWin32获取NDIS接口** pyWin32是一个...
例如,NI(National Instruments)公司的IVI(Interchangeable Virtual Instruments)基金会提供了一套全面的GPIB驱动程序,包括VISA(Virtual Instrument Software Architecture),它是跨平台的软件接口...
.NET Remoting是.NET Framework早期的分布式通信技术,允许跨进程或跨计算机的对象交互。"细细品味C#(Remoting专题).pdf"可能详细讲解了通道、激活方式、对象生存期管理等内容。 6. **Timer及多线程编程**: ...
17. JAVA是一种网络编程语言(C),常用于开发跨平台的应用程序。 18. SNMP(Simple Network Management Protocol,简单网络管理协议)建立在UDP上,提供不可靠的服务(A正确),SNMP2.0增加了安全性功能(C正确)...
如果需要持续连接,通常选择`bindService`,因为它提供了更细粒度的控制。 5. **创建AIDL客户端代理**:在A中,也需要创建一个`IBService.Stub`实例,作为调用B服务的代理。例如: ```java IBService binder = ...
展的延续,但在命名上,Sun 选择了一个全新的名字——JAX-WS (Java API for XML Web Services)。JAX-WS 是 JAX-RPC 的下...通过 Axis,开发者可以轻松地构建跨平台、跨语言的分布式应用,实现了基于 XML 的标准化通信。
同时,Facebook还使用了多种其他语言(如C++、Erlang等)开发的后台服务,这些服务通过Thrift RPC(远程过程调用)进行跨语言通信。Thrift是一个轻量级的框架,用于构建可扩展的服务,Scribe,一个日志收集系统,也...
Spring Boot的RESTful设计允许跨语言通信,但可能对客户端有较高的自定义需求。 - **Dubbo**:源自阿里的RPC框架,强调服务治理和性能,适合Java环境,通过Dubbox可以支持RESTful接口。但跨语言支持有限,适合内部...
4. **跨语言通信**: 支持多种编程语言(如C++, Java, Python等),便于构建多语言环境下的应用程序。 **四、学习路径** 1. **基础概念**: 首先理解Ice的核心概念和组件,熟悉对象代理和接口设计。 2. **代码生成*...