远程调用的几种方式

合集下载

电脑远程桌面技巧如何远程访问和控制你的电脑

电脑远程桌面技巧如何远程访问和控制你的电脑

电脑远程桌面技巧如何远程访问和控制你的电脑在日常生活和工作中,我们经常会遇到需要在不同设备间远程访问和控制电脑的需求。

无论是在办公室还是在家里,电脑远程桌面技巧都能为我们提供便利和高效性。

本文将介绍一些常见的远程访问和控制电脑的技巧,帮助读者更好地利用这些功能。

1. 远程访问桌面(Remote Desktop)远程访问桌面是一种常见而强大的远程桌面技术,允许用户通过互联网远程访问和控制另一台电脑。

以下是一些设置和操作步骤:(1)确保远程电脑开启了远程访问桌面功能,并且网络连接正常。

(2)在本地电脑上,点击开始菜单,搜索“远程桌面连接”,打开远程桌面连接应用。

(3)在远程桌面连接应用中,输入远程电脑的IP地址或计算机名,并点击“连接”。

(4)输入远程电脑的用户名和密码,点击“确定”开始远程访问。

2. 第三方远程桌面工具除了系统自带的远程桌面连接应用,还有许多第三方远程桌面工具可以提供更多高级功能和更好的用户体验。

以下是一些常见的第三方工具:(1)TeamViewer: TeamViewer是一款功能强大的远程桌面工具,支持跨平台远程访问和控制,操作简单且速度快速。

(2)AnyDesk: AnyDesk也是一款可靠的远程桌面工具,提供高性能的远程访问和低延迟的远程控制体验。

(3)Chrome 远程桌面:Chrome 远程桌面是一款基于谷歌浏览器的远程桌面工具,只需在谷歌浏览器中安装插件,便可实现远程访问和控制。

3. 云桌面服务除了使用远程桌面技术,云桌面服务也是一种方便的远程访问和控制电脑的方式。

云桌面服务将计算机的操作系统和应用程序部署在云服务器上,用户通过互联网远程连接至云桌面进行操作。

以下是一些常见的云桌面服务提供商:(1)亚马逊 AWS WorkSpaces: AWS WorkSpaces 提供强大的云桌面解决方案,用户可以根据需求选择不同配置的云桌面。

(2)微软 Azure Virtual Desktop: Azure Virtual Desktop 是微软提供的虚拟桌面解决方案,支持 Windows、Mac 和移动设备的远程访问。

python 远程执行方法

python 远程执行方法

python 远程执行方法
Python有几种远程执行的方法,可以根据具体的需求和场景选择合适的方法。

以下是一些常见的远程执行Python代码的方法:
1. SSH远程执行,通过SSH协议连接到远程主机,并在远程主机上执行Python代码。

可以使用paramiko库来实现SSH远程执行Python代码,也可以使用Fabric等工具来简化远程执行的过程。

2. 使用RPC框架,可以使用像Pyro4、XML-RPC或gRPC这样的远程过程调用框架,在远程主机上启动一个Python服务,然后在本地通过网络调用远程主机上的Python函数或方法。

3. 使用消息队列,通过消息队列(如RabbitMQ、ZeroMQ或Kafka)来实现远程执行Python代码。

可以将要执行的Python代码作为消息发送到远程主机,然后在远程主机上执行并返回结果。

4. 使用Web服务,可以在远程主机上搭建一个基于HTTP或其他协议的Web服务,然后通过HTTP请求将要执行的Python代码发送到远程主机,得到执行结果后再返回给本地。

5. 使用分布式计算框架,像Apache Spark、Dask或PyTorch 这样的分布式计算框架可以用来在集群上执行Python代码,可以将要执行的代码提交到集群上进行分布式计算。

以上是一些常见的远程执行Python代码的方法,每种方法都有其适用的场景和优缺点,可以根据具体的需求选择合适的方法来实现远程执行。

远程过程调用

远程过程调用

RPC的实现概况
17
国家信息中心 夏道藏 2013-524
RPC的实现概况
18
stub程序的功能是把这种过程调用 中所带的参数组装和拆卸成消息形 式,并进行相应的类型检查,然后 把这些消息传递给RPC runtime子 程序,后者再把它们发送到系统中 的其它场点。 事实上,程序设计者定义了过程并 写好了过程体,而系统生成了对应 的stub。
4
远程过程调用
为了实现NFS,Sun公司的工程师开
发了他们自己的RPC技术,通常称为 SunRPC或 ONC/RPC. ONC/RPC不 仅用于NFS的实现,也用于许多其它 网络应用. 存在和ONC/RPC不同的其它RPC 技术,例如DEC RPC.虽然它们都遵 从同样的概念途径,但是它们有不同 的内部结构,因此,无互操作性.
国家信息中心 夏道藏 2013-524
远程过程调用 本地过程调用 由客户程序激活。请求参量 调 用 模 块 执 行 一 个 过 程 调 被打成数据包。 用;由编译程序生成的代码 把参量写到栈中。 发送请求和在服务器程序中 跳转子过程。 的参量拆包。 在服务器上参量被拆包并且 参量从栈装载到子过程的局 传递给服务器的子过程。 部变量或寄存器。 在 服 务 器 上 执 行 请 求 ( 过 执行子过程代码。 程) 。 把结果打包和返回给客户。 结果和子过程的返回值被存 贮在寄存器中。 由客户把结果拆包,继续正 调用的过程访问数据。 常的程序遵照执行。
远程过程调用
7
远程过程调用(Remote Procedure Call)就是把过程调用的概念加以 扩允后引入分析式环境中的一种形 式。远程过程调用的形式和行为与 传统的过程调用的形式和行为类似, 主要差别在于被调用的过程实际运 行在一个与调用者所在场点不同的 场点上,见图。因此,需要设计相 应的软件来实现两者之间的连接和 信息沟通。

电脑远程控制技巧实现远程访问和协助

电脑远程控制技巧实现远程访问和协助

电脑远程控制技巧实现远程访问和协助远程控制技术是现代互联网时代不可或缺的一项技术。

通过远程控制技巧,我们可以在不同位置的电脑之间实现远程访问和协助,提高工作效率和便利性。

本文将介绍几种常见的电脑远程控制技巧,帮助读者更好地了解和运用这些技术。

一、远程桌面连接远程桌面连接是一种在局域网或互联网上实现远程控制的技术。

它通过在目标电脑上启用远程桌面服务,然后在本地电脑上使用远程桌面客户端连接目标电脑,实现对目标电脑的远程操作。

这种技术适用于需要远程管理服务器或远程协助他人的场景。

要使用远程桌面连接功能,首先需要保证目标电脑上已经启用了远程桌面服务。

然后,在本地电脑上打开远程桌面客户端,输入目标电脑的IP地址或计算机名,点击连接按钮即可建立连接。

成功连接后,就可以像在本地一样操作目标电脑了。

二、远程协助工具除了远程桌面连接外,还有一些专门用于远程协助的工具,例如TeamViewer、AnyDesk等。

这些工具提供了更加便捷和安全的远程协助服务,适用于跨平台、跨网络的远程访问和协助。

使用远程协助工具,首先需要在目标电脑和本地电脑上分别安装相对应的客户端软件。

然后,在目标电脑上生成一个唯一的ID,并将该ID告知协助者。

协助者在本地电脑上打开对应的软件,输入目标电脑的ID,点击连接按钮即可建立连接。

连接建立后,协助者即可对目标电脑进行远程操作。

三、远程命令行远程命令行是一种通过命令行界面实现远程访问和操作的技术。

它适用于需要在远程服务器上执行命令或脚本的场景。

要使用远程命令行技术,首先需要在目标电脑上启用远程管理功能,然后在本地电脑上打开命令行界面,输入远程命令连接目标电脑的IP地址和相应的命令即可实现远程操作。

四、安全注意事项在使用电脑远程控制技巧时,我们也要注意安全性。

以下是几个注意事项:1. 使用强密码:设置强密码是保护远程访问安全的首要步骤。

确保密码长度足够,包含字母、数字和符号等多种字符。

2. 确定主机白名单:在远程桌面连接或远程协助工具中,设置只允许特定IP地址或ID的主机连接。

如何远程调用Access数据库方法详解

如何远程调用Access数据库方法详解
如Βιβλιοθήκη 远程调用 Access 数据库方法详解
欢迎大家在查看本栏目!以下是我们给大家整理出来的远程调用 Access 数据库方法详解。我相信,这些也肯定是很多朋友在关心的,所以我就给大 家谈谈这个! 如何远程调用 Access 数据库方法详解: 使用了 TCP/IP,ADO 及 XML(需要安装 Microsoft XML 4.0。)。分服务器 和客户端两部分,服务器可以多用户同时连接。远程连接 Access 数据库有很 多方法,我以前已经比较详细的回答过(见下面所列的 5 种方法),我现在这 个例子属于其中的第 3 种方法(不需要使用 RDS 或 Web 服务器)。 远程连接 access 数据库的几个方法: 1.建立 VPN(Virtual Private Network),这样你的电脑和主机的连接就与局域 网无异,然后把服务器中 mdb 文件所在的 Folder 共享即可。ADO 连接如 下: 以下为引用的内容: oConn.Open “Provider=Microsoft.Jet.OLEDB.4.0; Data Source=ServerNameDatabaseFolderDatabase.mdb; Jet OLEDB:Database Password=databasepw;
“Remote Provider=Microsoft.Jet.OLEDB.4.0;” & _ “Data Source=c:somepathmydb.mdb”, _ “admin”, ““ 3.自己编写服务器程序,通过 TCP/IP,传递 Recordset。 4.使用第三方控件,如:ADO Anywhere 或 UDAParts RDB 等。 5.使用 XMLHTTP 好了,远程调用 Access 数据库方法详解的内容就给大家介绍到这里了。希 望大家学业有成,工作顺利

如何实现局域网中的远程桌面访问

如何实现局域网中的远程桌面访问

如何实现局域网中的远程桌面访问在局域网中实现远程桌面访问的方法随着信息技术的不断发展,远程办公和远程访问已经成为了一种趋势。

在局域网中实现远程桌面访问可以让用户在不同的终端设备上远程控制和访问其他计算机的桌面。

本文将介绍几种实现局域网中远程桌面访问的方法。

一、使用远程桌面协议(RDP)远程桌面协议是微软公司开发的一种用于远程控制Windows操作系统的协议。

通过使用RDP协议,用户可以在一台计算机上访问和控制另一台运行Windows操作系统的计算机。

实现局域网中的远程桌面访问,可以通过以下步骤进行操作:1. 打开被控制计算机上的远程桌面功能。

进入Windows系统设置,找到“系统”菜单,选择“远程桌面设置”选项,并勾选“允许远程连接到此计算机”。

2. 记下被控制计算机的IP地址。

在被控制计算机上按下Win+R组合键,打开运行对话框,输入“cmd”命令打开命令提示符窗口,在窗口中输入“ipconfig”命令查看本机的IP地址。

3. 在控制计算机上打开远程桌面连接工具。

按下Win+R组合键,打开运行对话框,输入“mstsc”命令打开远程桌面连接工具。

4. 在远程桌面连接工具中输入被控制计算机的IP地址,并点击“连接”按钮。

输入正确的用户名和密码后,即可实现对被控制计算机的远程桌面访问。

二、使用第三方远程桌面软件除了使用微软的远程桌面协议,还可以选择一些第三方的远程桌面软件来实现局域网中的远程桌面访问。

这些软件通常提供更多的功能和更便捷的操作方式。

以下是几个常用的第三方远程桌面软件:1. TeamViewer:TeamViewer是一种跨平台的远程控制和在线会议软件,其功能强大且易于使用。

用户只需在控制计算机和被控制计算机上分别安装TeamViewer软件,通过输入对方提供的ID和密码,即可建立远程连接并实现远程桌面访问。

2. AnyDesk:AnyDesk也是一种跨平台的远程桌面软件,其特点是速度快且流畅。

rpc调用场景

rpc调用场景

rpc调用场景
1. 远程服务调用:一个服务可以通过RPC调用另一个远程服务,以获取数据或执行操作。

例如,一个网站可以通过RPC
调用用户认证服务来验证用户登录信息,或者通过RPC调用
库存管理服务来检查产品的可用性。

2. 分布式系统通信:在一个分布式系统中,不同的服务或节点之间可以通过RPC实现通信和交互。

例如,分布式缓存系统
可以使用RPC通信来同步数据,或者分布式任务调度系统可
以使用RPC通信来协调任务的执行。

3. 微服务架构:在微服务架构中,各个服务之间可以通过
RPC进行通信。

例如,一个电子商务网站可能有多个微服务,如用户服务、订单服务、支付服务等,它们通过RPC调用来
进行数据交互和业务逻辑处理。

4. 异步通信:RPC调用也可以被用来进行异步通信。

例如,
一个应用可以通过RPC调用发送消息到消息队列,然后另一
个应用通过RPC调用从消息队列中接收和处理消息。

5. 移动应用后台服务:移动应用可以通过RPC调用后台服务
来获取数据或执行操作。

例如,一个社交网络应用可以通过RPC调用服务器端的用户信息服务来获取好友列表或更新用
户信息。

总之,RPC调用可以在各种场景中使用,用于实现不同系统、服务或节点之间的通信和交互。

httpClient远程调用webService

httpClient远程调用webService

我们将Web Service发布在Tomcat或者其他应用服务器上后,有很多方法可以调用该Web Service,常用的有两种:1、通过浏览器HTTP调用,返回规范的XML文件内容2、通过客户端程序调用,返回结果可自定义格式接下来,我利用Eclipse作为开发工具,演示一个Httpclient调用WebService的简单示例步骤如下:准备工作:用到的jar包有:下载链接(/detail/lanxuezaipiao/5354480)第一步:新建Java Project,项目名称为HttpCallWebService第二步:将所需jar包导入到库中第三步:编写调用class,这里有两种方式调用,即GET方式和POST方式,由于POST 方式较安全,故这里采用POST方式调用;请求数据的构造也有两种方式:静态和动态构造,下面分别介绍这两种方式:注:这里以E邮宝开放的webservice接口为例调用其中一个API函数,而E邮宝的webservice基于SOAP,故请求数据为SOAP格式,大家可根据自己情况进行修改。

静态构造请求数据:package com.http;import java.io.ByteArrayInputStream;import java.io.IOException;import java.io.InputStream;import mons.httpclient.HttpClient;import mons.httpclient.HttpException;import mons.httpclient.methods.InputStreamRequestEntity;import mons.httpclient.methods.PostMethod;import mons.httpclient.methods.RequestEntity;public class StaticHttpclientCall {/*** @param args* @throws IOException* @throws HttpException*/public static void main(String[] args) throws HttpException, IOException {// TODO Auto-generated method stubString soapRequestData = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"+ "<soap12:Envelopexmlns:xsi=\"/2001/XMLSchema-instance\""+ " xmlns:xsd=\"/2001/XMLSchema\""+ " xmlns:soap12=\"/2003/05/soap-envelope\">"+ " <soap12:Body>"+ " <GetAPACShippingPackage xmlns=\"/\">"+ " <GetAPACShippingPackageRequest>"+ " <TrackCode>123</TrackCode>"+ " <Version>123</Version>"+ " <APIDevUserID>123</APIDevUserID>"+ " <APIPassword>123</APIPassword>"+ " <APISellerUserID>123</APISellerUserID>"+ " <MessageID>123</MessageID>"+ " </GetAPACShippingPackageRequest>"+ " </GetAPACShippingPackage>" + "</soap12:Body>"+ " </soap12:Envelope>";System.out.println(soapRequestData);PostMethod postMethod = new PostMethod("/v3/orderservice.asmx?wsdl");// 然后把Soap请求数据添加到PostMethod中byte[] b = soapRequestData.getBytes("utf-8");InputStream is = new ByteArrayInputStream(b, 0, b.length);RequestEntity re = new InputStreamRequestEntity(is, b.length,"application/soap+xml; charset=utf-8");postMethod.setRequestEntity(re);// 最后生成一个HttpClient对象,并发出postMethod请求HttpClient httpClient = new HttpClient();int statusCode = httpClient.executeMethod(postMethod);if(statusCode == 200) {System.out.println("调用成功!");String soapResponseData = postMethod.getResponseBodyAsString();System.out.println(soapResponseData);}else {System.out.println("调用失败!错误码:" + statusCode);}}}动态构造数据:package com.http;import java.io.ByteArrayInputStream;import java.io.InputStream;import java.util.HashMap;import java.util.Map;import java.util.Set;import mons.httpclient.HttpClient;import mons.httpclient.methods.InputStreamRequestEntity;import mons.httpclient.methods.PostMethod;import mons.httpclient.methods.RequestEntity;// 动态构造调用串,灵活性更大public class DynamicHttpclientCall {private String namespace;private String methodName;private String wsdlLocation;private String soapResponseData;public DynamicHttpclientCall(String namespace, String methodName,String wsdlLocation) {space = namespace;this.methodName = methodName;this.wsdlLocation = wsdlLocation;}private int invoke(Map<String, String> patameterMap) throws Exception { PostMethod postMethod = new PostMethod(wsdlLocation);String soapRequestData = buildRequestData(patameterMap);byte[] bytes = soapRequestData.getBytes("utf-8");InputStream inputStream = new ByteArrayInputStream(bytes, 0,bytes.length);RequestEntity requestEntity = new InputStreamRequestEntity(inputStream, bytes.length, "application/soap+xml; charset=utf-8");postMethod.setRequestEntity(requestEntity);HttpClient httpClient = new HttpClient();int statusCode = httpClient.executeMethod(postMethod);soapResponseData = postMethod.getResponseBodyAsString();return statusCode;}private String buildRequestData(Map<String, String> patameterMap) {StringBuffer soapRequestData = new StringBuffer();soapRequestData.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");soapRequestData.append("<soap12:Envelopexmlns:xsi=\"/2001/XMLSchema-instance\""+ " xmlns:xsd=\"/2001/XMLSchema\""+ "xmlns:soap12=\"/2003/05/soap-envelope\">");soapRequestData.append("<soap12:Body>");soapRequestData.append("<" + methodName + " xmlns=\"" + namespace+ "\">");soapRequestData.append("<" + methodName + "Request>");Set<String> nameSet = patameterMap.keySet();for (String name : nameSet) {soapRequestData.append("<" + name + ">" + patameterMap.get(name)+ "</" + name + ">");}soapRequestData.append("</" + methodName + "Request>");soapRequestData.append("</" + methodName + ">");soapRequestData.append("</soap12:Body>");soapRequestData.append("</soap12:Envelope>");return soapRequestData.toString();}/*** @param args* @throws Exception*/public static void main(String[] args) throws Exception {// TODO Auto-generated method stubDynamicHttpclientCall dynamicHttpclientCall = new DynamicHttpclientCall("/", "GetAPACShippingPackage","/v3/orderservice.asmx?wsdl");Map<String, String> patameterMap = new HashMap<String, String>();patameterMap.put("TrackCode", "123");patameterMap.put("Version", "123");patameterMap.put("APIDevUserID", "123");patameterMap.put("APIPassword", "123");patameterMap.put("APISellerUserID", "123");patameterMap.put("MessageID", "123");patameterMap.put("TrackCode", "123");String soapRequestData = dynamicHttpclientCall.buildRequestData(patameterMap);System.out.println(soapRequestData);int statusCode = dynamicHttpclientCall.invoke(patameterMap);if(statusCode == 200) {System.out.println("调用成功!");System.out.println(dynamicHttpclientCall.soapResponseData);}else {System.out.println("调用失败!错误码:" + statusCode);}}}最终运行结果:可见最终返回的也是xml格式的数据,这里数据未进行格式化显示和处理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

远程调用的几种方式
在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB 和JMS 等,这些名词之间到底是些什么关系呢,它们背后到底是基于什么原理实现的呢,了解这些是实现分布式服务框架的基础知识,而如果在性能上有高的要求的话,那深入了解这些技术背后的机制就是必须的了,在这篇blog中我们将来一探究竟,抛砖引玉,欢迎大家提供更多的实现远程通讯的技术和原理的介绍。

基本原理
要实现网络机器间的通讯,首先得来看看计算机系统网络通信的基本原理,在底层层面去看,网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络IO 来实现,其中传输协议有tcp、udp等等,tcp、udp都是在基于Socket概念上为某类应用场景而扩展出的传输协议,网络IO,主要有bio、nio、aio三种方式,所有的分布式应用通讯都基于这个原理而实现,只是为了应用的易用,各种语言通常都会提供一些更为贴近应用易用的应用层协议。

应用级协议
远程服务通讯,需要达到的目标是在一台计算机发起请求,另外一台机器在接收到请求后进行相应的处理并将结果返回给请求端,这其中又会有诸如one way request、同步请求、异步请求等等请求方式,按照网络通信原理,需要实现这个需要做的就是将请求转换成流,通过传输协议传输至远端,远端计算机在接收到请求的流后进行处理,处理完毕后将结果转化为流,并通过传输协议返回给调用端。

原理是这样的,但为了应用的方便,业界推出了很多基于此原理之上的应用级的协议,使得大家可以不用去直接操作这么底层的东西,通常应用级的远程通信协议会提供:
1. 为了避免直接做流操作这么麻烦,提供一种更加易用或贴合语言的标准传输格式;
2. 网络通信机制的实现,就是替你完成了将传输格式转化为流,通过某种传输协议传输至远端计算机,远端计算机在接收到流后转化为传输格式,并进行存储或以某种方式通知远端计算机。

所以在学习应用级的远程通信协议时,我们可以带着这几个问题进行学习:
1. 传输的标准格式是什么?
2. 怎么样将请求转化为传输的流?
3. 怎么接收和处理流?
4. 传输协议是?
不过应用级的远程通信协议并不会在传输协议上做什么多大的改进,主要是在流操作方面,让应用层生成流和处理流的这个过程更加的贴合所使用的语言或标准,至于传输协议则通常都是可选的,在java领域中知名的有:RMI、XML-RPC、Binary-RPC、SOAP、CORBA、JMS,来具体的看看这些远程通信的应用级协议:
RMI
RMI是个典型的为java定制的远程通信协议,我们都知道,在single vm中,我们可以通过直接调用java object instance来实现通信,那么在远程通信时,如果也能按照这种方式当然是最好了,这种远程通信的机制成为RPC(Remote Procedure Call),RMI正是朝着这个目标而诞生的。

来看下基于RMI的一次完整的远程通信过程的原理:
1. 客户端发起请求,请求转交至RMI客户端的stub类;
2. stub类将请求的接口、方法、参数等信息进行序列化;
3. 基于socket将序列化后的流传输至服务器端;
4. 服务器端接收到流后转发至相应的skelton类;
5. skelton类将请求的信息反序列化后调用实际的处理类;
6. 处理类处理完毕后将结果返回给skelton类;
7. Skelton类将结果序列化,通过socket将流传送给客户端的stub;
8. stub在接收到流后反序列化,将反序列化后的Java Object返回给调用者。

根据原理来回答下之前学习应用级协议带着的几个问题:
1. 传输的标准格式是什么?
是Java ObjectStream。

2. 怎么样将请求转化为传输的流?
基于Java串行化机制将请求的java object信息转化为流。

3. 怎么接收和处理流?
根据采用的协议启动相应的监听端口,当有流进入后基于Java串行化机制将流进行反序列化,并根据RMI协议获取到相应的处理对象信息,进行调用并处理,处理完毕后的结果同样基于java串行化机制进行返回。

4. 传输协议是?
Socket。

XML-RPC
XML-RPC也是一种和RMI类似的远程调用的协议,它和RMI的不同之处在于它以标准的xml格式来定义请求的信息(请求的对象、方法、参数等),这样的好处是什么呢,就是在跨语言通讯的时候也可以使用。

来看下XML-RPC协议的一次远程通信过程:
1. 客户端发起请求,按照XML-RPC协议将请求信息进行填充;
2. 填充完毕后将xml转化为流,通过传输协议进行传输;
3. 接收到在接收到流后转换为xml,按照XML-RPC协议获取请求的信息并进行处理;
4. 处理完毕后将结果按照XML-RPC协议写入xml中并返回。

同样来回答问题:
1. 传输的标准格式是?
标准格式的XML。

2. 怎么样将请求转化为传输的流?
将XML转化为流。

3. 怎么接收和处理流?
通过监听的端口获取到请求的流,转化为XML,并根据协议获取请求的信息,进行处理并将结果写入XML中返回。

4. 传输协议是?
Http。

Binary-RPC
Binary-RPC看名字就知道和XML-RPC是差不多的了,不同之处仅在于传输的标准格式由XML转为了二进制的格式。

同样来回答问题:
1. 传输的标准格式是?
标准格式的二进制文件。

2. 怎么样将请求转化为传输的流?
将二进制格式文件转化为流。

3. 怎么接收和处理流?
通过监听的端口获取到请求的流,转化为二进制文件,根据协议获取请求的信息,进行处理并将结果写入XML中返回。

4. 传输协议是?
Http。

SOAP
SOAP原意为Simple Object Access Protocol,是一个用于分布式环境的、轻量级的、基于XML进行信息交换的通信协议,可以认为SOAP是XML RPC的高级版,两者的原理完全相同,都是http+XML,不同的仅在于两者定义的XML规范不同,SOAP也是Webservice 采用的服务调用协议标准,因此在此就不多加阐述了。

CORBA
Common Object Request Broker Architecture(公用对象请求代理[调度]程序体系结构),是一组用来定义“分布式对象系统”的标准,由OMG(Object Menagement Group)作为发起和标准制定单位。

CORBA的目的是定义一套协议,符合这个协议的对象可以互相交互,不论它们是用什么样的语言写的,不论它们运行于什么样的机器和操作系统。

CORBA在我看来是个类似于SOA的体系架构,涵盖可选的远程通信协议,但其本身不能列入通信协议这里来讲,而且CORBA基本淘汰,再加上对CORBA也不怎么懂,在此就不进行阐述了。

JMS
JMS呢,是实现java领域远程通信的一种手段和方法,基于JMS实现远程通信时和RPC 是不同的,虽然可以做到RPC的效果,但因为不是从协议级别定义的,因此我们不认为JMS是个RPC协议,但它确实是个远程通信协议,在其他的语言体系中也存在着类似JMS 的东西,可以统一的将这类机制称为消息机制,而消息机制呢,通常是高并发、分布式领域推荐的一种通信机制,这里的主要一个问题是容错(详细见ErLang论文)。

来看JMS中的一次远程通信的过程:
1. 客户端将请求转化为符合JMS规定的Message;
2. 通过JMS API将Message放入JMS Queue或Topic中;
3. 如为JMS Queue,则发送中相应的目标Queue中,如为Topic,则发送给订阅了此Topic 的JMS Queue。

4. 处理端则通过轮训JMS Queue,来获取消息,接收到消息后根据JMS协议来解析Message并处理。

回答问题:
1. 传输的标准格式是?
JMS规定的Message。

2. 怎么样将请求转化为传输的流?
将参数信息放入Message中即可。

3. 怎么接收和处理流?
轮训JMS Queue来接收Message,接收到后进行处理,处理完毕后仍然是以Message的方式放入Queue中发送或Multicast。

4. 传输协议是?
不限。

基于JMS也是常用的实现远程异步调用的方法之一。

相关文档
最新文档