rpc协议,socket是什么语言?

2022-01-16 18:51:35 百科大全 投稿:一盘搜百科
摘要socket是属于JAVA语言rpc协议。Java的socket封了一层,一些底层功能可能不是完全可用,不过应付通常的需求倒是足够了,而Python的socket基本就是原生接口,操作系统支持的基本都

socket是属于JAVA语言rpc协议。Java的socket封了一层,一些底层功能可能不是完全可用,不过应付通常的需求倒是足够了,而Python的socket基本就是原生接口,操作系统支持的基本都支持,甚至可以用raw socket抓底层包。如果只是普通的C/S结构现在很少直接使用socket了,自定协议实现起来很麻烦,新手也处理不好协议设计的问题,比如说消息如何分片、如何匹配、如何解析,如何实现未来协议上的可扩展和多版本兼容等等。一般都是使用通用的协议,最常见的是后端极其成熟,二来各种语言的/S结构上使用AJAX实现Web版的应用。对于需要两个方向的推送的可以使用WebSocket。除此以外,JSON-RPC也是非常简单的RPC协议。除了这些通用协议之外,常见的MySQL、Redis等协议也都有相应的软件包可以使用。现在自己调用socket接口,一般都是有特别的需要,或者需要实现一个没有现成的软件包的协议。

rpc采用什么协议传输?

中文释义:(RFC-1831)远过程调用协议注解:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。 RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用过程接收答复信息,获得进程结果,然后调用执行继续进行。 目前,有多种RPC模式和执行。最初由Sun公司提出。IETF ONC宪章重新修订了Sun版本,使得ONC PRC协议成为IETF标准协议。现在使用最普遍的模式和执行是开放式软件基础的分布式计算环境(DCE)。

程序员如何设计一个rpc框架

RPC框架全称叫“Remote Procedure Call”-远程过程调用。

rpc协议,socket是什么语言?

rpc协议,socket是什么语言?

业界知名RPC各大互联网公司都或多或少实现了自己的RPC框架,其中比较出名且常用的有:

阿里巴巴的dubbo:这个大家应该都用到过吧?GitHub地址:://github.com/apache/dubbo

基于阿里巴巴fork的当当版dubbox:这个貌似也都用到过?在dubbo不死不活的那几年。GitHub地址:://github.com/dangdangdotcom/dubbox

rpc协议,socket是什么语言?

谷歌grpc:谷歌版本的rpc,GitHub地址(Java版):://github.com/grpc/grpc-java

rpc协议,socket是什么语言?

大家可以自己去GitHub上去搜索这三大框架并进行学习。

rpc协议,socket是什么语言?

自己简单实现一个最基本的RPC框架如果我们自己去实现一个简单的RPC框架要怎么做?这个时候我们应该意识到我们是在写一个框架,写一个框架意味着我们无法再随意的使用第三方依赖包,也就是除了一些工具类包可以使用,其他的都需要我们用Java一行一行的写出来。

rpc协议,socket是什么语言?

下面提供一下如何用Java实现一个简单的RPC功能(谈不上框架):

rpc协议,socket是什么语言?

先定义一个RPC接口类,代码如下图:

rpc协议,socket是什么语言?

写Rpc接口类的实现类实现这两个方法,export方法如下图:

refer方法:

框架定义完成后,我们开始使用这个框架,先简单定义一个测试用的服务接口:

实现类:

我们需要写一个provider把这个服务提供出去,运行这个main方法即可:

写一个cosumer远程消费这个服务:

运行这个main方法会输出:

这样一个简单的RPC远程过程调用就实现了,是不是很简单?采用Java Socket套接字编程和Java自带的序列化。

设计一个RPC框架需要我们掌握哪些知识?上面简单实现了一个RPC框架,这个只是实验性质的编码,实际上是无法使用的,因为在实际业务中,我们面对的是高并发、多请求。上面的套接字编程也是阻塞的,另外序列化也是用的Java自带的序列化方法。

而了解主流rpc实现原理的同学都知道,每一个rpc框架在性能的考虑上都做到了自己框架的极致,框架本身既要考虑高可扩展的同时又得考虑高性能。

比如在dubbo中,默认使用hessian序列化的方式传输网络数据,同时也实现了主流的集中序列化方式,比如Java自带的序列化、Kryo序列化、fastJson序列化等方式。底层采用netty去做网络通信使用非阻塞NIO。注册中心既有zookeepeer,也支持redis。动态代理采用Javassist等等技术。

所以我们在设计一个rpc框架的时候,首先必须掌握上面说的那些知识,还得要求我们能够很好的结合每一个技术,做到融汇贯通。

网上也有很多关于RPC相关知识的文章,也有dubbo、dubbox、grpc等rpc框架的源码解析文章,建议大家可以深耕这一块,彻底摸透掌握这块的实现原理。

以上就是我个人关于“如何设计一个RPC框架”的回答,欢迎大家批评指正,交流补充。

我是【java架构设计】,关注我,持续为您提供Java优质内容!

TAGS: socket  协议  语言  基本  原生  底层  rpc  应付  
声明:一盘搜百科所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系 88888@qq.com