郊外程序中通常使用 http 调用和二 pc 调用来实现不同的通信需求,那有什么区别了? http 通常用于以下三个场景, 一、网络传输数据,如使用 http 协议项服务器发送数据或从服务器获取数据。 二、网页前端交互,如使用 ajax 技术在网页上移步获取数据。三、网络 p i 服务调用,如使用 h t t p 协议调用 restola p i r p c 调用通常用于以下三个场景, 一、分布式应用程序之间的通信,如使用 r p c 调用,在不同的服务之间进行数据交换。二、大型企业及应用程序中不同组建之间的通信,如使用 r p c 调用不同的微服务。三、实时数据传输,如使用 r p c 调用, 传输实时流数据。需要注意的是, http 调用和二 pc 调用都是基于网络通信实现的,它们的区别在于通信的方式和协议。 http 协议通常用于传输外部内容, 而 rpc 协议通常用于实现远程过程调用。因此,选择何种方式通信取决于具体的业务需求和技术实现。
粉丝1689获赞8882
哈喽,大家好,我是麦克。上周有个小伙伴去面试的时候被问到 rpc 协议和 agb 协议的区别这个问题,然后 在我的粉丝群里面引起了很多的讨论,最后我发现其实很多小伙伴都不能很好的去回答这个问题,所以今天我就拿这样一个面试题给大家做一个分享。大家之所以对这两个协议搞不清楚,其实我认为的原因是在目前的微服加工里面,我们去实现微服之间的通信的时候, 我们是可以直接使用 rpc 框架,也可以直接去使用基于 app 协议的 restfo 接口。很多小伙伴认为 apc 协议和 hp 协议都能够去实现远程数据的交换,那么这两者去实现对比就很正常了。 但是我想告诉大家,这两个并不是同一个维度的技术。 ipc 的中文全程叫远程过程钓鱼协议,它的核心目标是让开发人员在进行远程方法钓的时候,就像钓 本地方法一样,不需要为了去额外完成这个交互去做过路的编码。所以为了达到这个目的,就有了这样一个 rpc 协议的模型。 在这个模型中我们可以看到像克拉的 stop, 他是作为客户端的一个存根去代理客户端的请求,然后通过派克做序列化,最后通过远程通信协议把序列化的数据传输到福气上。注意这里用到了远程通信协议, 这个远程通信协议既可以使用 tcb 协议去传输,也可以使用 hgb 协议传输, 所以通过这样一个模型就实现了 rpc 的这样一个目标,让开发人员没有任何感知的情况下去实现远程方法调用,而 hb 协议是为了外部浏览器和外部服气之间通信去设计的一个通行协议,它底层仍然采用 tcp 协议传输,而在 tcp 协商自己定义了通信报文的一个规范,我们可以使用 hp 协议来实现跨网络节点的数据传输,所以这就是这两个协议的一个特点。所以通过这样一个分析,我们发现 rpc 协议它并不是一个通信协议, apc 协议才是通信协议, 而 rpc 定义的是一个远程过程钓鱼协议,它的底层通信去实现数据传输,它得依赖于一些成熟的通信协议,比如说 hb 协议,甚至我们可以直接去在 tcb 协议上去做自定义的包围协议,这些都可以。 所以我才在前面说 ipc 和 hp 这两个并不是同一个维度的协议,这两者并没有什么可比性。好了,今天的分享就到这里,另外,我把二零二二年最热门的一千道面试题整理成了面试手册,有需要的小伙伴可以在我的评论区置顶中去领取。
http 协议和 rpc 协议有什么区别?最近啊,很多同学去面试的时候呢,被问到这样一个问题,不知道该怎么回答,今天我就带大家来了解一下这个问题的高手应该怎么回答。下面我们看看普通人和高手的回答。 普通人的回答,嗯,他们两个协议的区别我觉得是可以从像,呃, 因为 h 鞋他是个应用层协议吗?然后他主要是用在用在那个浏览器跟服务器端的一个数据通信上, 他是解决这种客户端和服务端数据交互的一个协议。然后 rpc 协议是他是解决我们多个计算机之上的一些应用之间的一个通信的,所以我认为他们两个从面相的这个 背景来说是不一样的。嗯,高手的回答,好的面试官,这个问题啊,我需要从三个层面来回答。首先啊,从功能层面来说呢, hp 协议,它是一个应用成的超文本传输协议,它是外围网数据传输通信的一个基础,也就是说主要服务在于网月端和服务端之间一个数据传输上。而 rbc 呢,是一个远程过程调模协议,它是定位在实现不同计算机应用之间的一个数据通信, 屏蔽了通信的底层复杂度,让我们的开发者呢,能够去像调用本地服务一样去完成远征服务的一个调用。因此啊,这两个协议在定位层面他是完全不同的。其实呢,从实验层面来说啊, ig 协议呢,它是一个已经实现并且成熟的应用之协议,它定义了通信豹纹的一些格式,比如说像 request body 啊和 request hander 以及 response 巴铁和 response heather。 也就是说,符合这样一个协议特征的通信协议呢,才是 suv 协议。 rpc 呢,只是一种通信协议的一个规范,他并没有具体的实现,只有按照 rpc 通信协议规范去实现的通信框架,才是协议的真正具体的一个实现,比如说像 rbc 等等。因此呢,我们可以在实现 rbc 框架的时候,自定义报文通信的一个协议规范 和自定义训练化方式,或者自定义网络通信协议的类型等等。所以呢,从这个层面来说, h c 协议它是一个成熟的应用层协议,而 rpc 呢,只是定义了不同服务之间数据通信的一个规范。最后呢,从应用层面来说啊, h c 协议和实现了 rpc 协议的框架,都能够去实现 化网络节点之间的一些服务通信,并且他们底层呢,都使用了一个 tcb 协议作为一个通信基础。但是由于 rpc 只是 一种标准协议,我们只需要符合 rpc 协议的这个框架,都属于 rpc 框架。因此呢, rpc 网络通信协议层呢,也可以使用 app 协议来去实现,比如说即 apc、 oppo, 它底层都采用了 app 协议作为一个通信的基础。以上呢,就是我对这个问题的一个理解, 我没有想到这个问题的考察频率还挺高,网上很多人对这个问题的回答也是一知半解,说了半天也没有说明白。其实只要理解的这两个协议的本身的一个特点和背景,就能够很轻松的去回答出来。 好了,本期的视频就到这结束了,如果喜欢我的作品,记得点赞、收藏加关注,你的支持是我持续创作的动力,我们下期再见!
哈喽,大家好,我是鼓爆科技的联合创始人麦克。昨天呢,一个工作五年的粉丝去京东面试,在第一面的时候被问到项目用 double 还是 open thing, h t t p 和 r p c 有什么区别这个问题,这也是一个非常常见的高频面试题, 问题的难度并不大。今天的视频呢,我就带大家去深度的了解一下这个问题的原理和回答思路。另外呢,我把往期的视频内容都打包在了一份家网面试指南中,里面包含了三十五万字的面试文档,两百份精选简历模板以及家网价格、公司学习路线图, 有需要的小伙伴可以在我的评论区的置顶中去免费领取。通过这个问题呢,面试官想要去了解你在项目中微服架构和远程通信的经验,面试官会关心你是否知道 double 和 office 在不同情况下的使用场景,并且能否去了解 htv 和 rpc 通 中心的区别。 double 和 open fit 都是一个 rpc 框架,在做技术选型的方面,我们主要关心几个维度,第一,功能上是否满足当前场景的需求。第二,技术的上手难易程度。第三,技术的成熟度。第四,社区的成熟度。所以在回答这个问题的时候,可以根据这几个维度去回答就行了。 然后 http 和 rpc 的区别,大家可以看一下这个图就很容易理解。 rpc 是一个远程过程调用协议,他解决的是让两个远程服务之间的调用,就像本地调用一样,不需要去考虑远程通信的细节这样一个问题。 而 h d b 呢,是一个应用者协议,他定义的是一个远程通信的协议规范,这两者的维度是不一样的。下面我们来看一下这个问题的完整回答。 double 是一种基于 rpc 的分布式服务框架,它支持高性能的服务注册、发、 发现和远程通信。通常情况下呢, double 适用于需要高性能、高可靠性和复杂服务治理的场景。他提供了丰富的功能,比如说负载均衡、超时处理、熔断降级等等, 适用于复杂的微服体系架构。 origin 是一个声明式的 h d p 客户端,它简化了基于 h d p 的远程通信过程。 origin 适用于简单的微服场景,特别是当你的微服之间使用 h d p 通信,并且希望通过接口来定义客户端调用的时候。 origin 呢,是一个很好的选择, 它可以把 hd 请求转化为 java 接口方法调用,提供了方便的开发体验。在项目中,选择 double 还是 open fit, 通常取决于我们具体的业务需求和微服架构的一些复杂性。如果我们需要更高性能、可靠性和高级功能,那么 double 是一个很好的选择。如果你的需求相对简单, 希望提高开发效率,那么 open 费呢,是一个很好的选择。 h t p 是一种基于超文本传输的应用程协议。 r p c 是种远程过程调用协议,它允许一个网络节点上的程序调用另外一个网络节点上的程序的函数或者方法。就像调用本地函数一样。 它们的主要区别在于, h t p 通常用于跨越互联网传输数据,适合用于面向网络的通信。而 r p c 更多的是用来实现跨进程或者机器之间的通信,适合面向应用程序的通信,它的性能会更好。 好了,今天的面试题就分享到这里,如果你觉得这个视频对你有所帮助,记得点赞和关注,我是麦克,我们下期再见。
http 跟 rpc 有什么区别呢?可能这是很多搞编程开发同学没有弄明白的地方,毕竟现在的技术发展很快,技术的分支也很多,概念也非常多。 首先 r p c 这一概念啊,被称为远程过程调用,最早的起源可以追溯到八十年代吧,是由尼尔森提出的,而那个时候的 h d b 还只是处于 萌芽状态。 rpc 强调的是一种架构的设计思想,而这种设计思想的实现可以依靠 tcp 或 utp 这样的基础协议来实现,当然也可以通过 stp 实现。如果要是依靠 tcp 的实现呢,可以基于自定义协议与特定的压缩密码方式实现传输,而如果是 ltb, 实现性能上会差一些, 同时也是基于铭文的方式传输。我们现在能够见到的 spring cloud 其实就是一种 r p c 技术的实现,但是其依靠的是 l t e 来构建。也就是说,微架构的设计实际上是来自于 我们 rbc 的设计思想。而在微架构设计之中, ltd 又是一种最为基础的常见协议。
哈喽,大家好,我是林华。那今天给大家简单聊一下 double 吧,很多面试者出去都喜欢说他是一个 rpc 框架制作服务调用的,那 rpc 是什么呢? rpc 的英文学呢?叫做 remote procedure core 及远程过程调用。 远程过程调用其实它是对标的本地过程调用,在我们的项目里面通常是 controller 通过 autoyo 调我们的 service 服务,而远程过程调用就是我们的 service 服务,它不在我们同一个机器,同一个进程里面的,它有可能被打散到互联网里面不同的机器之上。那我们怎么去做服务之间的通信呢? 那如果说我现在有一个用户服务需要调用一个商品服务,我们该怎么去做呢?最近有很多小伙伴在后台问我有没有关于大厂面试的一些门档,我这里给大家准备了有一千道面试题,还有简历模板,有需要的同学可以在评论区评论领取。首先第一点,在互联网 环境里面,你要做服务之间的数据交换。那首先第一点就是我们需要一个通讯协议,比如说 tcbip 啊,比如说 sktp, 比如说等等的 nike 等等的这些通讯工具去帮我们做数据交换。第二点,我们需要知道它机在哪里,它的 ip 是什么? 端口号是什么,以及被调的服务名称是什么,我们这个服务里面的这个入餐类型是什么?返回参数类型什么?而且在这过程当中里面还有序列化和反序列化这些功能。以上两点是实现一个 rpc 远程过程调的简单的方式, 但是在分布式架构里面,我们仅仅是完成福尔调还不够的,我们可能还需要一些流量的监控,流量的智能容错和负载均衡, 还有可扩展能力,还有一些服务治理,还有等等的其他这些功能。那 double 呢? double 的作用就是说它可以让用户忽略以上我提到这些技术难点,它通过动态代理、 责任链,装饰器啊,策略, spi、 可扩展等等的这些模式,能够让我们用户的服务能够拥有这些功能。拥有这些功能之后呢,我们 double, 它的目标就是使用,让我们用户使用远程服务,就跟调用本地服务一样简单,它就是用来做 服务之间的远程服务通信和服务治理的。那 double 它也是基于一种设计模式,是与生产者、消费者模型的设计架构为基础的。它分为 pride, consumer, registry, monitor, 还有 double, 三点零里面的 metal data 元素与中心。这里面分为几个角色,一个是生产者,生产者呢,第一点 他负责把自己的服务注册到注册中心之上。第二点,我们的 consumer, 他也就是我们的消费者,他会主动的去什么?去我们的注册中心去订阅这个服务。如果说当这个服务发生了变更之后,我们的注册中心他会发布一个事件,并且 推送最新的数据到我们的 consumer, 也就是我们的消费者进行数据更新,然后我们消费者只需要通过 reference service 就可以完成远程过程调哦。在这个过程里面, monitor 看似没有做任何事情,事实上它属于上帝视角,属于 o b 模式,它有很多的事件,有很多的这些监听,它可以帮助它 收集很多相关的信息。以上这些内容对于 double 来讲还是属于比较偏基础的,但是呢,对于 double 的初步理解到这里就足够了。
唐老师,有粉丝搞不清 hdtp 和 ipc 到底有什么区别,你能给解释一下吗?好的,首先呢,我觉得最大的区别就是传输协议的区别, ipc 呢,没有规定具体用什么协议,但是呢,它可以基于 tcp 协议,也可以基于 http 协议, 或者说 http 也是 rpc 的一种。那么 rpc 的主要目的呢,是用于获取远程机器的程序的执行结果,大部分情况下呢,是利用 soca 的 apr 来实现的,而 soca 的呢,又是基于 tcp 协议来实现, tcp 呢,是网络协议中比较底层的一种协议。 那下面呢,简单介绍一下 ipc 的整个的一个调用的步骤。为了帮助大家在这个求职旺季顺利上岸,我特意整理了一份 java 程序员求职初期手册,包含五十万字的高频面试题,点立模板和学习路线图,大家可以去评论区的字典中领取。首先第一步呢, 就是服务的调用方和服务的提供方会建立一个收费的一个连接。然后第二步呢,服务的调用方通过调用收费的 api, 将调用的端口名称呢,方法名称呢和参数的序列化以后,传递给我们的服务提供方。 第三步呢,就是服务停放方会进行一个反射电话,然后再利用反射呢去调用相关的方法。第四步呢,就是将相关的一个交用结果,然后返回给我们的服务停放方。 那么 http 呢,基于 http 协议来实现的, http 协议呢,是属于 osi 协议的第七层,它是一个比较高层的协议,属于应用层。 那还有没有其他的区别呢?当然还有比如说传输效率的区别,那么 r p c 的传输效率呢,比 h d p 要高很多, r p c 如果使用 t c p 底层协议的话,他仅求的包纹体积呢会更小,所以呢传输速度呢也会更 快,那如果使用 http two 的话,也可以去减少爆满的体积,也能够提高一些传输的效率。那么如果是基于 http 一点一协议的话,在他的请求中呢,会包含很多荣誉的内容。当然如果要实现 app 的方式呢,也有很多种,比如说他可以基于 draft 来实现一些高效的凹进制的传输。 http 实现 rpc 呢,基本上都是基于节省来实现的,那么节省的这些大小和现代化的耗时,相对于 rap 的来说的话,都要更加消耗性能。 最后一点呢,就是负载均衡的实现,因为 r p c 呢,本身是为服务治理而生的一种通信机制,所以一般的 r p c 框架呢,都会自带负载均衡的这么一个功能。而 h t t b 呢,必须要去配置,比如说 antix 啊哈 brox 呀等等,这些才能够去满足负载均衡的需求。 以上呢,就是我对 http 和 rpc 的一个理解,感谢大家的关注和点赞,如果各位汤粉们还有需要补充的话,可以在评论区留言。
能说下 http 和 rpc 的区别吗?啊,其实严格来说 htp 和 rpc 啊,它不是一个层面的东西啊,就像我这个图上面写了一般可以说 rpc 包含的 htp, 或者说也可以说啊,就 rpc 在在 http 之上啊,我这边写了大概一个图啊, 就是像我们 h t p 啊,它实上是一种应用程的协议啊,主要强调的是网络通信。那我们 r p c 啊,它实上是一种用于分布式系统之间的通信的协议,强调是服务之间的远程调调用啊,那像我们一些 r p c 的框架,如加 p c 底层传输协议,其实用的就是 h t p q 啊,那包括像 w 三也兼容了 grpc 啊,他其实使用使用了 http 作为传输层的协议啊,就是大概你你稍微了解下这张图就行了啊。
平时我们打开网页,比如购物网站某宝,都是点一下列表商品,跳转一下网页就到了商品详情。 从 http 协议的角度来看,就是点一下网页上的某个按钮,前端发一次 http 请求,网站返回一次 http 响应。这种由客户端主动请求服务器响应的方式,也满足大部分网页的功能场景。但有没有发现,这种情况下,服务器从来就不会主动给客户端发一次消息, 就像你喜欢的女生从来不会主动发消息找你一样。但我们假设有那么个场景,你打开浏览器就像往常一样刷网页,这时候右下角突然弹出一个小广告, 提示你一个人在家偷偷才能玩哦!求知,好学、勤奋,这些刻在你 dna 里的东西都动起来了。你点开后发现长相平平无奇的古某提示,你倒是九条狗全服横着 走。影帝某辉老师跟你说,系兄弟就来砍我,来都来了,你就选了个角色进到了游戏界面里,这时候上来就是一个小怪从远处走来,然后疯狂喷火攻击你。你全程没点任何一次鼠标,服务器就自动将怪物的移动数据和攻击数据源源不断发给你了。 这也太暖心了吧!感动之余,问题就来了,像这种看起来服务器主动发消息给客户端的场景是怎么做到的?在真正回答这个问题之前,我们先来聊下一些相关的知识背景。 其实问题的痛点在于,怎么样才能在用户不做任何操作的情况下,网页能收到消息并发生变更。最常见的解决方案是网页的前端代码里不断定时发 http 请求到服务器,服务器收到请求后给客户端响应消息,这其实是一种伪服务器推的形式, 他其实并不是服务器主动发消息到客户端,而是客户端自己不断偷偷请求服务器,只是用户无感知而已。用这种方式的场景也有很多,最常见的就是扫码登录,比如某信的平台登录页面,二维码出现之后, 前端网页根本不知道用户扫没扫,于是不断去向后端服务器询问,看有没有人扫过这个码,而且是以大概一到两秒的间隔去不断发出请求,这样可以保证用户在扫码后能在一到两秒内得到及时的反馈,不至于等太久。这就是 http 定时轮巡。但这样会有两个比较明显的问题, 第一个是当你打开 f 十二页面时,你会发现满屏的 http 请求虽然很小,但这其实也消耗带宽,同时也会增加下游服务器的负担。第二个问题是,最快情况下,用户在扫码后需要等个一到两秒, 正好才触发下一次 http 请求,然后才跳转页面,用户会感到明显的卡顿。那么问题又来了,有没有更好的解决方案?有,而且实现起来成本还非常低,他就是长轮循。 我们知道 http 请求发出后,一般会给服务器留一定的时间作响应,比如三秒,规定时间内没返回,就认为是超时。 如果我们的 http 请求将超时设置的很大,比如三十秒,在这三十秒内,只要服务器收到了扫码请求,就立马返回给客户端网页,如果超时,那就立马发起下一次请求, 这样就减少了 http 请求的个数,并且由于大部分情况下,用户都会在某个三十秒的区间内做扫码操作,所以响应也是及时的,比如某度云网盘就是这么干的。所以你会发现,一扫码,手机上点个确认, 电脑端网页就秒跳转,体验很好,真一举两得。像这种发起一个请求,在较长时间内等待服务器响应的机制,就是所谓的长轮巡机制。我们常用的消息对列 rocket mq 中, 消费者去取数据时也用到了这种方式。像这种在用户不感知的情况下,服务器将数据推送给浏览器的技术,就是所谓的服务器推送技术,他还有个毫不沾边的英文名 tomat 技术,大家听过就好。上面提到的两种解决方案,本质上其实还是客户端主动去取数据, 对于像扫码登录这样的简单场景还能用用,但如果是网页游戏呢?游戏一般会有大量的数据需要从服务器主动推送到客户端,这就得说下 web socket 了。我们知道 tcp 连接的两端,同一时间里,双方都可以主动向对方发送数据,这就是所谓的全双。 而现在使用最广泛的 http, 一点一也是基于 tcp 协议的,同一时间里,客户端和服务器只能有一方主动发数据,这就是所谓的半双弓,也就是说好好的全双弓, tcp 被 http 用成了半双弓。为什么? 这是由于 http 协议设计之初考虑的是看看网页文本的场景,能做到客户端发起请求在由服务器响应就够了,根本就没考虑网页游戏这种客户端和服务器之间都要互相主动发大量数据的场景,所以为了更好地支持这样的场景,我们需要另外一个基于 tcp 的新协议。 于是,新的应用层协议 web socket 就被设计出来了,大家别被这个名字给带偏了。虽然名字带了个 socket, 但其实 socket 和 web socket 之间就跟雷锋和雷峰塔一样,二者接近毫无关系。那么 建立 web socket 连接呢?我们平时刷网页一般都是在浏览器上刷的,一会刷刷图文,这时候用的是 http 协议,一会打开网页游戏,这时候就得切换成我们新介绍的 web socket 协议,一会还得看个视频。 为了兼容这些使用场景,浏览器在 tcp 三次握手建立连接之后,都统一使用 http 协议先进行一次通信。如果此时是普通的 http 请求,那后续双方就还是老样子,继续用普通 http 协议进行交互,这点没啥疑问。 如果这时候是想建立 web socket 连接,就会在 http 请求里带上一些特殊的 hider 头。其中 connection upgrade 表明浏览器想升级协议。从 upgrade web socket 可以看出,客户端想升级成 web socket 协议,同时带上一段随机生成的 base 六四码,也就是 secret web socket key 发给服务器。 如果服务器正好支持升级成 web socket 协议,就会走 web socket 握手流程。同时根据客户端生成的 base 六四码,用某个公开的算法变成另一段字符串,放在 http 响应的 secret web socket accept 头里,同时带上一零一状态码发回点浏览器。 一零一确实不常见,他其实是指协议切换之后,浏览器也用同样的公开算法,将贝斯六四码转成另一段字符串,如果这段字符串跟服务器传回来的字符串一致,那验证通过。 web socket 和 http 一样,都是基于 tcp 的协议,经历了三次 tcp 握手之后,利用 http 协议升级为 web socket 协议,后续双方就使用 web socket 的数据格式进行通信。数据包在 web socket 中被叫做真,我们来看一下它的数据格式长什么样子。这里面字段很多, 但我们只需要关注下面这几个 out code 字段,这个是用来标志这是个什么类型的数据针。比如等于一时是指 text 类型,也就是 dream 类型的数据包等于二十二。禁止数据类型的数据包等于八,是关闭连接的信号。 hello 的字段存放的是我们真正想要传输的数据的长度,单位是字节。比如你要发送的数据是字符串一百一十一,那它的长度就是三。另外可以看到我们存放 pall 的长度的字段有好几个,我们既可以用最前面的七倍,也可以用后面的七加十六倍或七加六四倍。 那么问题就来了,在数据层面大家都是零幺二禁滞留,我怎么知道什么情况下应该读七倍,什么情况下应该读七加十六倍的呢? web socket 会用最开始的七倍做标志位,不管接下来的数据有多大,都先读最先 的七个倍,根据他的取值决定还要不要再读个十六倍或六十四倍。如果最开始的七倍的值是零到一百二十五,那么他就表示了 payload 全部长度,只读最开始的七个倍就完事了。如果最开始的七倍的值是一百二十六,也就是十六进制的零 x 七 e, 那它表示 payload 的长度范围在一百二十六到六万五千五百三十五之间。接下来还需要再读十六 bait, 这十六 bait 会包含 payload 的真实长度。如果最开始的七 bait 的值是一百二十七,也就是十六进制的零 x 七 f, 那它表示 payload 的长度范围大于等于六万五千五百三十六。接下来还需要再读六十四 b, 这六十四 b 会包含 palod 的长度,这能放二的六十四次方霸气的数据,换算一下,好多个 tb 肯定够用了。剩下的就是 paylo data 字段,这里存放的就是真正要 传输的数据,在知道了上面的 payload 长度后,就可以根据这个值去截取对应的数据。大家有没有发现一个小细节, web socket 的数据格式也是消息头加消息体的格式,也就是 payload 加 payload data 的形式。 之前写的既然有 http 协议,为什么还要有 rpc? 提到过, tcp 协议本身就是全双工,但直接使用纯裸 tcp 去传输数据会有粘包的问题。为了解决这个问题,上层协议一般会用消息头加消息体的格式去重新包装要发的数据, 而消息头里一般含有消息体的长度,通过这个长度可以去截取真正的消息体。 h t t p 协议和大部分 r p c 协议以及我们今天介绍的 web socket 协议都是这样设计的。你在网上可能会看到一种说法, web socket 是基于 h t t p 的新协议,其实这并不对,因为 web socket 就 在建立连接时才用到了 http, 升级完成之后就跟 http 没有任何关系了。这就好像你喜欢的女生通过你要到了你大学室友的微信,然后他们自己就聊起来了。你能说这个女生是通过你去跟你室友沟通的吗?不能, 你跟 http 一样,都只是个工具人。这就有点借壳生蛋的那意思。 web socket 完美继承了 tcp 协议的全双功能力,并且还贴心地提供了解决粘包的方案。它适用于需要服务器和客户端频繁交互的大部分场景,比如网页或小程序游戏、 网页聊天室,以及一些类似飞书这样的网页协同办公软件。回到视频开头的问题,在使用 web socket 协议的网页游戏里,怪物移动以及攻击玩家的行为是服务器逻辑产生的,对玩家产生的伤害等数据都需要由服务器主动发送给客户端,客户端获得数, 最后展示对应的效果。好了,到这里, web socket 的知识点就讲完了,总结的事情就交给你们了。
每天一道面试题,什么是啊 pc 调用啊? pc 就是远程过程调用。对于加瓦程序而言,啊 pc 就是远程方法调用,表示一个方法调用远程的另外一个方法。微服务架构中的一个服务调用另外一个服务就可以用啊 pc 调用。 rpc 调用与 http 调用的区别? http 调用使用的是 http 协议,是网络七成中的应用层协议。 http 协议规定的数据传输的格式 rascophone 风格就是通过 http 协议来实现的。 rpc 不是网络层面的协议,而是更上层的灵活的通信协议。 rpc 调用可以自定义数据格式,数据传输方 是只要能保证调用到远程方法即可。
rpc 是编程开发中的常见技术,当然随着 ltp 协议不断的完善,很多的人都会简单的认为 rpc 就是对 jason 结构的一种封装,但是这恰恰是一种最差的传输模式吧。但是呢,剩下的通用性各个编程语言都可以使用, 而如果要考虑到了性能因素啊,则一定会基于二进制的压缩视线数据传输,这样对于不同语言的接入其实就是比较繁琐的了。 加我作为分布式架构中常用的编程技术, rpc 框架也是最多的,一方面是由于 nike 框架的出现拉低了网络通讯服务的开发难度,另外一点就是加我本身动态代理设计模式的使用,简化了语言层面上的 rpc 服务调用难度。 而其他的编程技术可以选用的只能是通用语言的 r p c 实线,例如 up 或 safety。
好,那我们再来看什么?是啊, pc 啊, pc, 他表示啊, 翻译过来啊,应该叫做远程过程调用。但是说实在的,对于我们加瓦程序员而言,什么是过程? 我们可能只知道存储过程,但是肯定不是值这个过程啊。所以,呃, ipc, 如果说我们是针对于像加法这种面相对象语言的话,我们可以不用把它翻译成为远程过程调用,而可以把它翻译成为远程方法调用啊,因为过程这个东西其实在思域语言里面啊, 他是有这个函数,也是有过程的。对,那么在我们的加法这种面相对象的语言里面,我们只有方法调用啊,所以,呃,我们可以把它翻译成为远程的方法调用,那么你就可以对比着来理解,我们有本地方法调用啊,我们可以把本地方法调用,就理解为我一个进程里面的啊, 这个方法调,那个方法对进程内部的方法调用,那么远程方法调用就是我 a 进程里面的一个方法,我要调到 b 进程里面的另外一个方法,这个叫做 远程方法调用。好,那么,呃,怎么做到的?但具体我们等一下再来看。比如说还有一个点,就是啊, pc 调用和 hcb 调用他是有区别的, 我们的 ipc 他表示的是一种调用远程的方法的方式,那只要说我能够保证 a 进程里面的方法能够调用到你 b 进程里面的方法就行了,我不管你 底层到底采用什么方式,只要能够达到这个目的就可以。比如说你的底层你肯定仍然要用网络,哎,那你要传输网络数据,你可以使用 hctb 协议来进行传输,你也可以直接使用 tcp 协议来进行传输,只要能够保证,哎,把我要掉的那个 逼近程里面的方法的所有的一些信息,对不对?我都通过网络传给你,逼近程,你逼近程,最后根据我所传给你这些信息,你去执行到对应的逼方法,然后把结果返回给我就可以。我这个数据到底怎么传的? 说了你可以用 htvp, 也可以用 tcp 或者用其他任何的方式,你只要能够保证这个数据能够传给 b 进程就可以。所以说这是我们啊 pc 调用,所以在加法中间呢,我们可以直接的使用某个服务接口的代理对象来直接这个方法,就是他说的在 a 进程里面,我只需要调用这个方法, 这个方法你到底怎么实现的? a 进程他并不关心,我只要调用某个方法啊,那所以说我们就可以抽象出来一个接口,在 a 进程这边啊,你就去调用这个接口的那个方法,那么具体的,我的,我的底层,我会 根据你当前这个服务接口去生成一个代理对象,然后呢啊,你真正执行的其实这个代理对象的当前这个接口里面的方法啊, 底层,哎,你就可以把这些方法的信息通过网络啊,去传给我们的远端,对吧?所以说啊,呃,有一种说法就是 rpc 协议,他是在我们的 httv 协议之上的一种协议啊, 其实也可以这么理解,但当然更加专业一点,应该叫什么呢?我们应该就叫做啊, pc opph t t p, 那或者说啊 pc oppc p 啊, 这两种应该大家能够理解的啊,在 tcp 之上的 rpc, 在 http 之上的 rpc, 因为他们的底层是基于不同的协议去进行数据的传输的。好,所以说这是,呃,这个给大家讲一下。