nodejs教你搭建rpc微服务框架

作者:admin / 时间:1年前 (2018/11/11) / 分类:后端测试 / 阅读:414 / 评论:0

先简单介绍下什么是rpc,rpc即remote process call,翻译成中文就是远程过程调用,说简单点就是别人在你电脑上装了rpc后,别人操作你的电脑就像操控自己电脑一样方便,细思极恐。

提到rpc,懂java的肯定会想到著名的rpc框架dubbo。其实rpc的原理都是共通的,今天小编就带着大家用nodejs搭建一个简单的rpc框架

下面我们来看一下代码,这段程序主要是实现分布式计算用的。首先是请求端,为了确保服务端服务正常,客户端主进程需要先检查服务端状态(比如node服务有没有崩掉),然后重置服务器状态(比如服务器正在执行其他操作,无法响应现有的请求),最后再检查下服务器状态,确保服务器状态重置成功。

nodejs教你搭建rpc微服务框架

客户端请求前的准备操作

在检查过程中如果有一个环节检查不通过就停止程序运行并给出错误警告。

下面那一段主要是用来判断用户启用了哪些服务器,最后给所有服务器发请求,并且所有服务器处理完请求并返回结果了,客户端的主线程才执行后面的操作

nodejs教你搭建rpc微服务框架

检查客户端对服务器的配置项

这里面有一个很重要的函数Product,这个函数是rpc客户端的精华主体,接收服务器的返回结果也是在这里进行的。

nodejs教你搭建rpc微服务框架

Product函数

里面又有一个很重要的函数remote,这是一个向服务端发起请求的http方法

nodejs教你搭建rpc微服务框架

http请求函数

当看到encrypt或decrypt函数的时候就进行了rpc的第二个环节了:序列化。序列化就是将要发往服务端的字符串进行编码加密,然后到服务端进行响应的解码

nodejs教你搭建rpc微服务框架

序列化,这里也可以理解为加密

之前我们谈到主线程,那么就会有对应的子线程,我让子线程接收服务端每隔20秒返回的cpu和内存使用情况,并打印到控制台和日志文件,便于我实时了解服务器的压力状况

nodejs教你搭建rpc微服务框架

接收服务端传来的cpu和内存压力信息

至此,客户端的事情就结束了。

在服务端,我细分了处理器的线程,如果是双核及以上的处理器,第一个处理器逻辑核心用来处理客户端发来的rpc函数,第二个核心用来监听检查服务器的状态

nodejs教你搭建rpc微服务框架

启用了两个线程,如果服务器是单核,也不影响rpc任务的执行

下面的handle方法用来获取本机的ip地址,大括号里的那几行代码是整个服务端的核心代码,是用来加载过程调用的函数的。

nodejs教你搭建rpc微服务框架

加载过程调用函数

说到这就不得不提rpc服务端的一个很重要的概念,注册和发现中心。说得简单点就是传过来的函数必须事前在这个注册中心被注册过才能被rpc服务器识别。上面的那段函数是用来计算客户端传来的数据,下面的那段是服务端获取自己的cpu和内存使用情况,因为我的服务器有windows也有linux,所以做了判断。

nodejs教你搭建rpc微服务框架

注册和发现中心

最后要讲的就是过程调用的核心代码,即服务端是怎么解析客户端传来的数据。其实很简单,就是将客户端传来的字符串解析成函数,然后在服务端的全局环境下执行这段函数,最后通过res.end包装promise返回给客户端。

nodejs教你搭建rpc微服务框架

过程调用函数

不管在全局注册什么方法,解析客户端传来的数据都用同一段函数,所以你会看到check,exec还是other,最后调用的方法都是同一个。

最后给大家展示一下我运行的效果图

nodejs教你搭建rpc微服务框架

centos(服务端)

nodejs教你搭建rpc微服务框架

kali(服务端)

nodejs教你搭建rpc微服务框架

windows2008(服务端)

nodejs教你搭建rpc微服务框架

win7(客户端)

最后一张是客户端的控制台打印信息,基本上能获取到你想了解的服务端的任何信息。

nodejs教你搭建rpc微服务框架

盗取网上的一张图解释下rpc原理

说了这么多,我知道没几个人能从头看到尾的,因为如果没有对rpc和js有所了解的话,很难看懂,但我希望通过本篇的学习,你应该知道,rpc包含五个部分:客户端,客户端函数中心,rpc运行时,服务端注册和发现中心和服务端。At last but not least,nodejs也是可以搭建rpc框架的。诶,说了这么多,估计也没人看,我去搬砖了。


没有评论,留下你的印记,证明你来过。


发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。