远程服务调用,是不是API的另一个说法?

远程调用(RPC,Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。

RPC其实仅仅是一种技术思维方式,而非一种实际的网络协议,所以在实现RPC常见基于HTTP、TCP、UDP这三种网络协议进行封装。虽然说RPC是远程服务调用,但HTTP、TCP、UDP都是远程调用其他服务器里面的服务,那是不是这3种网络协议的统称就是RPC?

带着这个疑问,我们先去了解下RPC的实现原理的如何的。

RPC的数据流向(从左到右)

1)序列化:发送方将传输的内容进行序列化排序,方便接收方接收到后按此顺序进行获取使用(反序列化来解密传输内容)

2)协议编码:将RPC的传输协议既定为http、tcp或udp的其中一种

3)网络传输:通过网络将数据信息传输到目标机器,从目标机器返回得到结果

从上面的实现原理,给人的感觉除了需要序列化外,其他跟普通的网络协议没什么区别,那RPC跟普通的http请求有何区别?

远程服务调用是基于本地服务器调用其他远程目标服务(该服务可能是使用其他语言研发的接口)。那么既然有远程服务调用,那么本地服务调用又是如何?

<?phpuse curlService;$curlService = new curlService();$orderInfo = curlService::payService->addOrder('张三', '移动电源', 3);//curlService的代码<?phpclass curlService{   public function __call($method, $params)   {            $url = '';//远程服务的接口            $postData['class'] = $this->class;            $postData['method'] = $method;            $postData['params'] = $params;            $this->response = HttpRequest::post($url, $postData);   }  }// 远程服务的接受者<?php $class = $_POST['class'];$method = $_POST['method'];$param = $_POST['param'];call_user_func_array(array($class, $method), $params);//通过反射机制将调用转发到对应的方法上,这个时候参数的顺序就变成异常重要了。

本地服务调用,意味着我们所调用addOrder这个本地类文件的方法,则需要传输$userName,$goods,$num这3个参数,而且这3个参数的顺序还不能捣乱,不然会导致逻辑出错或代码类型不一致直接爆出500。

大致上本地服务调用大家应该也有概念了,那我们直接写一个简单的远程服务调用的Demo来加深大家的理解

<?phpuse curlService;$curlService = new curlService();$orderInfo = curlService::payService->addOrder('张三', '移动电源', 3);//curlService的代码<?phpclass curlService{   public function __call($method, $params)   {            $url = '';//远程服务的接口            $postData['class'] = $this->class;            $postData['method'] = $method;            $postData['params'] = $params;            $this->response = HttpRequest::post($url, $postData);   }  }// 远程服务的接受者<?php $class = $_POST['class'];$method = $_POST['method'];$param = $_POST['param'];call_user_func_array(array($class, $method), $params);//通过反射机制将调用转发到对应的方法上,这个时候参数的顺序就变成异常重要了。

从上面的本地服务调用和远程服务调用,他们之间简单的区别仅仅是有无网络请求,但在使用上给开发者的感觉是一致的,我都是调用一个服务,服务的概念仅仅是做一个事情,而不是调用一个接口。

如果非要将RPC和网络协议Http进行对比,实际上Http并不关心你请求的参数顺序而是关心请求参数对应的键值名,通过键值名来获取请求数据。而RPC则没有键值名的概念,他的理论是减少传输过程中的消耗故使用序列化的排序来推测请求参数,故请求参数的顺序很重要,这个概念跟本地服务调用也是一致的理解。

pb9调用http发短信post_远程服务调用相关推荐

  1. 飞信免费发短信API接口调用方式

    飞信免费发短信API接口调用方式(通过HTTP访问以下网址.支持GET和POST): http://sms.api.bz/fetion.php?username=您的移动飞信登录手机号&pas ...

  2. iOS调用系统发短信功能详解

    iOS调用系统的发短信功能可以分为两种:1,程序外调用系统发短信.2,程序内调用系统发短信.第二种的好处是用户发短信之后还可以回到app.这对app来说非常重要. 程序外调用系统发短信 这个方法其实很 ...

  3. java 调用飞信发短信(转)

    网上看到有网页版的飞信,http://fetionlib.appspot.com/ 可以添加好友,群发和定时发送短信给飞信好友,还开放了API接口供程序调用,可以用它来监控机器是否正常服务定期给管理员 ...

  4. iOS 调用系统发短信以及打电话功能

    先介绍一种最简单的方法: 调用打电话功能 [[UIApplicationsharedApplication] openURL:[NSURL URLWithString:@"tel://100 ...

  5. H5调用手机发短信和打电话功能

    前言 本来感觉用H5写调用电话拨号功能和发送短信功能会很不好写,后来通过实践得出,其实很简单的. 首先简单介绍一下业务功能,就是显示通讯录中的人员用户信息,然后分别点击相应的按钮来发送短信和拨通电话 ...

  6. python发送短信接口_python 调用接口发短信

    调用接口发送短信 此处接口是移动云nas """ Create_of_date:2020-03-08 Author:nod description: 调用移动云mas接口 ...

  7. Android 调用系统发短信界面,给指定号码发短信,并带短信内容

    工具类如下ContentUtil.java: package com.zhoucj.messagedemo.util; import android.content.Context; import a ...

  8. python软件是免费的吗-谁说程序员不懂浪漫?用Python每天自动给女朋友免费发短信...

    前言 之前发过一篇文章,用 Python 制作的给父母天气预报提醒的小工具天气变冷了,给父母制作一个天气提醒小助手,这篇文章我同步到博客上之后,有读者在评论区留言,对于部分微信没有网页版接口,导致无法 ...

  9. 移动设备wap手机网页html5通过特殊链接:打电话,发短信,发邮件详细教程

    移动设备wap手机网页html5通过特殊链接:打电话,发短信,发邮件详细教程 原文地址:https://www.luoxiao123.cn/1120-2.html 最近逍遥乐在寻找手机网页调用系统短信 ...

最新文章

  1. java 消息推送_hanbo-push分布式消息推送、IM服务
  2. 《看聊天记录都学不会C#?太菜了吧》(6)多晦涩的专业术语原来都会那么简单
  3. 考研 | 先预览一下考研真题是考研小白最快的入门方法(含21考研最新真题)
  4. 使用Anaconda3配置多版本Python虚拟开发环境详细步骤
  5. 让孩子亲近自然,提高家长对户外亲子研学的人生和了解。
  6. 再谈贝叶斯学派与频率学派的区别
  7. 【游戏】基于matlab GUI万年历【含Matlab源码 257期】
  8. watson机器人_使您的聊天机器人看起来更加智能! Watson Assistant的隐藏功能。
  9. Java关键字表格、Java有哪些关键字?
  10. 卸载vuecli3_针对遇到安装或卸载vue-cli失败的解决方案
  11. mysql可以用表情符号_让MySQL支持emoji表情符号存储
  12. 计算思维不是计算机科学的核心素养,信息技术学科核心素养
  13. 服务器 intel cpu系列,Intel CPU产品系列有哪些
  14. java web 测试要点记录
  15. 区分计算机网络和互联网的概念,网络的概念,网络与互联网的区别
  16. python开发板卡驱动开发_树莓派开发板如何驱动LED灯
  17. 【CSDN编程竞赛第六期】python详解
  18. dz邮箱验证怎么设置_如何设置discuz qq邮箱验证
  19. 解决word行距和字距不准
  20. 拍案叫绝的算法(二)

热门文章

  1. ssh密钥分发之二:使用sshpass配合ssh-kopy-id编写脚本批量分发密钥:
  2. 关于JAVA编译时找不到自定义包的问题
  3. form表单中的常用控件
  4. LeetCode 252. Meeting Rooms
  5. 一款简洁大气的jquery日期日历插件
  6. Gridview分页模板
  7. [ASP.NET] Session 详解
  8. ARM 架构(V7,V8),和ARM内核区别,从ARM7,ARM9到Cortex-A7,A8,A9,A12,A15到Cortex-A53,A57
  9. tensorflow编程入门笔记之一
  10. 连接svn认证失败有那些原因_windows局域网搭建svn服务器