物联网套件 PHP服务器 怎么响应RPC请求-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

物联网套件 PHP服务器 怎么响应RPC请求

2017-06-06 15:17:25 2641 1

硬件发送RPC请求到PHP服务器,请求PHP服务器怎么正确的返回RRPC。PHP SDK里用哪个类????

取消 提交回答
全部回答(1)
  • 牧明
    2019-09-25 13:45:39
    如何实现 JavaScript RPC 应用 
    

    一、一个 JavaScript RPC 的实现 1、RPC工作流程 JavaScript RPC 的简单实现过程是: 在客户端JavaScript脚本中,将要调用的服务端PHP函数名和函数参数(本地的JavaScript变量值)作为要传输的数据,通过Ajax传输到服务端,同时,Ajax设置一个回调函数,以便使用服务端函数的返回结果。在服务端PHP脚本中,接收Ajax传输的数据,从中取出要执行的函数名和函数参数。然后执行指定的函数,并将执行函数的返回值作为传输的数据,直接输出到浏览器,以此作为响应AJax的请求。客户端的Ajax在接受服务端的响应后,把返回的数据传递给AJax的回调函数。到此完成了一个RPC的流程。 2、传输的数据 在RPC执行过程中,客户端与服务端需要相互传输数据,我们分别称之为客户端数据和服务端数据。对此的说明如下表: 客户端数据: 函数名:服务端PHP脚本中存在的函数。 函数参数:客户端JavaScript脚本中的变量值。 服务端数据: 函数返回值:执行服务端PHP函数的返回值。 3、序列化与反序列化 为了要传输客户端的变量值和服务端的函数返回值,需要对其进行序列化处理。与之相对应的在传输后还要进行反序列化处理。 JavaScript中的变量的类型:基本类型和JSON类型(普通数组、元对象) PHP中的变量类型:基本类型和数组(普通数组和关联索引数组) PHP语言具有序列化和反序列化函数,而JavaScript语言中没有,因此我们要自己实现它。 由于我们进行JavaScript和PHP之间的数据交换,所以直接把JavaScript变量序列化为PHP的序列化形式。我们实现Js2PhpSerialize函数来完成这个任务。 Js2PhpSerialize:主要是把JSON对象及嵌套调用的JSON对象和基本类型的数据表示为PHP的序列化形式。 服务端的PHP在执行函数后,把结果序列化为JavaScript能理解的形式,以便于eval动态生成变量。我们实现php2JsSerialize函数来完成这个任务。 4、功能实现 我们创建两个类来完成上述功能。一个是客户端的JavaScript类,一个是服务端的PHP类。 文件名:jsrpc.class.js 要实现的功能: A、序列化JavaScript的数据。 B、Ajax传输序列化数据 C、反序列化JavaScript数据。 D、设置回调函数。 文件名:jsrpc.class.php 要实现的功能: A、响应Ajax请求,接收序列化数据。 B、反序列化PHP数据,基本类型和数组。 C、序列化PHP数据为JavaScript数据。 将JavaScript的数据类型转换为PHP可以理解的形式,通过Ajax把转换后的数据传递到服务端,由PHP的eval函数解析为PHP的数据类型。 PHP函数执行后,将执行结果数据转换为JavaScript可以理解的形式,由Ajax的回调函数响应,并由JavaScript的eval函数解析为JavaScript的数据类型。 二、应用示例 代码片段: JavaScript端: <SCRIPT language=javascript src="jsrpc.class.js"></SCRIPT> <SCRIPT language=javascript> var arr = new Array(1,'abc', new Array(3,'xyz'),5); var rpc = new JsRPC(); rpc.call('ajax_server.php', 'checkBook', response, arr); function response(result) { alert(result[1]); } </SCRIPT> PHP端(即文件ajax_server.php): <?php require_once('jsrpc.class.php'); $ar = new JsRPC(); $ar->register('checkBook'); $ar->start(); function checkBook($param) { return $param; } ?> 如上所示,它使用方法与一个叫CPaint的类库相似,只是省去了将数据装到一个对象中的步骤。 三、获取源码

    “答案来源于网络,供您参考”

    0 0
相关问答

1

回答

服务器未响应

2018-11-02 15:24:20 556浏览量 回答数 1

1

回答

服务器重启蓝屏

2018-10-16 09:09:04 398浏览量 回答数 1

1

回答

物联网套件 中 服务器订阅不能发送消息到消息服务

2017-10-07 19:56:45 2471浏览量 回答数 1

1

回答

RPC 服务器太忙,不能完成该操作。菜鸟求助

2017-06-30 14:43:05 7110浏览量 回答数 1

1

回答

请问图片上是不是服务器空间的根目录?ftp

2017-06-20 10:50:42 1826浏览量 回答数 1

3

回答

请问图片上是不是服务器空间的根目录?我是建淘客网站用的

2017-06-20 10:53:25 2370浏览量 回答数 3

0

回答

服务器sec

2017-04-12 10:57:57 2435浏览量 回答数 0

1

回答

网站dns服务器无响应

2017-03-29 22:50:52 1769浏览量 回答数 1

0

回答

HPC的服务器可以试用么?

2016-07-28 11:25:38 4327浏览量 回答数 0

2

回答

ESC美国硅谷服务器

2015-11-24 16:06:24 6538浏览量 回答数 2
+关注
0
文章
1
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载