前言
RPC(Remote Procedure Call)是一种远程过程调用的协议,允许客户端通过网络调用另外一台服务器上的函数或方法。在前后端分离的时代,RPC 使得前端与后端之间通信更加高效,降低开发维护成本。
本文将介绍如何使用 npm 包 @nodeguy/json-rpc
在 Node.js 环境下实现 RPC。
安装
运行以下命令安装 npm 包:
npm install @nodeguy/json-rpc
初始化
首先,我们需要初始化 JSON-RPC 服务器。创建一个 app.js
文件,输入以下代码:
-- -------------------- ---- ------- ----- ------- - ----------------------------- -- ------- ----- ------ - ------------------------ -- - -- ----- ------- --- -- ----- ------------------- -- -- - --------------------- ------ -- --------- -- ---- -------- ---
注意:代码中的 TODO 注释出现的原因是,我们还未处理客户端的请求。
客户端请求
客户端请求由 JSON-RPC 消息组成,每条消息对应一次客户端的调用请求。JSON-RPC 消息的格式如下:
{ "jsonrpc": "2.0", // 指定 JSON-RPC 版本 "method": "helloWorld", // 调用的方法名 "params": ["Bob"], // 调用的参数列表 "id": "c957f330-20e7-11ec-8d3d-0242ac130003" // 记录请求 id,用于响应结果时定位请求 }
jsonrpc
属性指定 JSON-RPC 协议版本,目前只有 2.0 版本。method
属性指定要调用的方法名,params
属性指定方法的参数列表,id
属性记录请求 id,用于响应结果时定位请求。
客户端请求示例:
{ "jsonrpc": "2.0", "method": "helloWorld", "params": ["Bob"], "id": "c957f330-20e7-11ec-8d3d-0242ac130003" }
服务端响应
客户端请求发起后,服务端需要响应请求。在 app.js
文件中处理客户端请求:
-- -------------------- ---- ------- ----- ------- - ----------------------------- -- ------- ----- ------ - ------------------------ -- - ----- - ------- ------- -- - - ------------ --------------------- ------- --- ------ ----------- ---- ------ ----------- --- -- ----------- -- ---- ------ -------- - ---- ------------- ----- -------- - ------- --------------- ------ -------------------------------- ---- -------- ------ ------------------------ ------- --- ------- ---- - --- -- ----- ------------------- -- -- - --------------------- ------ -- --------- -- ---- -------- ---
createServer()
创建服务端实例,提供一个回调函数作为参数。回调函数的参数 req
包含客户端请求的消息体,其中 req.payload
包含客户端请求的全部信息。
服务端响应客户端的请求,需要分两种情况:
- 请求成功,返回结果
- 请求失败,返回错误信息
下面分别介绍如何处理这两种情况。
请求成功
请求成功时,服务端需要返回方法的返回值作为响应消息体。使用 jsonRpc.createResponse()
输入方法的返回值,并将其作为参数传递,返回响应消息。
例如,上面的示例中,当客户端发送 helloWorld
方法的请求时,服务端返回 Hello, ${params[0]}!
作为响应。
const response = `Hello, ${params[0]}!`; return jsonRpc.createResponse(response, id);
请求失败
请求失败时,服务端需要返回一个错误信息作为响应消息体。使用 jsonRpc.createError()
输入合适的错误码和错误信息,并将其作为参数传递,返回响应消息。
例如,上面的示例中,如果客户端输入了错误的方法名,则服务端返回 404
状态码和错误信息 'Method not found'
。
return jsonRpc.createError(404, 'Method not found', id);
完整代码示例
-- -------------------- ---- ------- ----- ------- - ----------------------------- -- ------- ----- ------ - ------------------------ -- - ----- - ------- ------- -- - - ------------ --------------------- ------- --- ------ ----------- ---- ------ ----------- --- -- ----------- -- ---- ------ -------- - ---- ------------- ----- -------- - ------- --------------- ------ -------------------------------- ---- -------- ------ ------------------------ ------- --- ------- ---- - --- -- ----- ------------------- -- -- - --------------------- ------ -- --------- -- ---- -------- ---
总结
@nodeguy/json-rpc
是一个方便易用的 Node.js RPC 库,可以大幅提升前后端通信效率。通过阅读本文,你可以学会如何使用 @nodeguy/json-rpc
在 Node.js 环境下快速搭建 RPC 服务器,并能处理客户端请求。希望本文能够对您的工作和学习有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60066bcd967216659e244a5b