- 本地函数调用是可预测的,并且成功或失败仅仅取决于控制的参数。网络请求是不可预测的,请求或者响应可能由于网络问题而丢失,或者远程计算机可能速度慢或不可用,这些问题完全不在控制范围之内。网络问题很常见,因此必须有所准备,例如重试失败的请求。
- 本地函数调用,要么返回一个结果,要么抛出一个异常,或者永远不会返回(因为进入无线循环或者进程崩溃)。网络请求有另一个可能的结果:由于超时,他返回时可能没有结果。在这种情况下,根本不知道发生了什么;如果没有收到来自远程服务的响应,无法知道请求是否成功。
- 如果重试失败的网络请求,可能会发生请求实际上已经完成,只是响应丢失的情况。在这种情况下,重试将导致该操作被执行过多次,除非在协议中建立重复数据消除(幂等性)机制。本地函数调用则没有这样问题
- 每次调用本地函数时候,通常需要大致相同的时间来执行。网络请求比函数调用要慢的多,而且其延迟也有很大的变化; 情况好的时候,他可能会在不到1ms的时间内完成,但是当网络拥塞或者远程服务过载时候,可能需要几秒钟的时间才能完成相同操作。(上周五中午同事反馈,线上服务响应变慢的原因)
- 调用本地函数时,可以高效的地将引用(指针)传递给本地内存中的对象。当发出网络请求时候,所有这些参数都是需要被编码成可以通过网络发送的字节序列。如果参数是像数字或字符串这样的基本类型,这没有关系,但是对于较大的对象很快就会出现问题。
- 客户端和服务可以用不同的编程语言来实现,所有RPC框架必须将数据类型,从一种语言转换成另一种语言。因为不是所有的语言都具有心痛的类型。所以最终可能会丑陋。例如,回想一下JavaScript的数字大于2的53次方的问题。用单一的语言编写的单个进程并不会存在此种问题。
以上这些因素意味着,尝试使远程服务看起来像本地编程语言中的本地对象一样毫无意义,因为他们是根本不同的事情。但是REST的部分吸引力在于,他并不是师徒隐藏他是基于网络协议的事实。
标签:请求,网络,函数调用,重试,本地,远程 来源: https://blog.csdn.net/dgutliangxuan/article/details/118067076
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。