gRPCity
是一个运行在 Node.js 的 gRPC 微服务库,结合了 proto-loader
和
grpc-js
,提供了非常简易的方式去加载 proto 文件,简化了很多难以理解的技术概念,
只需要几个函数就可以轻松实现客户端和服务端,同时也提供非常多高级的功能满足大多数
开发场景。
名字来源于: gRPC + City = gRPCity,寄托了作者希望这个库能支撑了业务城市的建 设,以技术底座的视角,让大家聚焦业务,更好地支撑交付。
特性如下:
- API: 通信协议以 gRPC 为基础,通过 Protobuf 进行定义;
- Protobuf: 只支持动态 pb 加载,简化了 pb 文件的加载流程;
- Client: 一次配置,随时随处调用,支持 multi-server 的调用;
- Server: 简化了初始化流程,三步完成启动,支持 multi-server 的启动;
- Credentials: 客户端和服务端完整地支持了证书加载,提供了通信加密的能力;
- No-Route: 无路由,rpc 与 method 天生绑定;
- Middleware: 客户端和服务端都支持中间件机制;
- Metadata: 规范化了元信息的传递和获取;
- Reflection: 服务端内置 gRPC reflection API;
- Error: 提供了专有 Error 对象,保证异常捕捉后可以针对性处理;
- Promise: rpc 方法内部支持了 promisify,同时也保留了 callbackify ;
- Config: 与官方配置对齐,支持 pb load 配置和 gRPC channel 配置;
- Typescript: 纯 TS 实现,类型齐全。
...还有更多等你发现。
可通过访问 grpcity.js.org 查看完整的文档和示例。
npm i grpcity
首先,创建greeter.proto
文件,编写下面的内容到其中:
syntax = "proto3";
package helloworld;
service Greeter {
rpc SayGreet(Message) returns (Message) {}
}
message Message {
string message = 1;
}
然后,创建loader.js
, 编写下面的代码到其中:
import { ProtoLoader } from 'grpcity'
import path from 'node:path'
export default new ProtoLoader({
location: path.join(__dirname, './'),
files: ['greeter.proto']
})
其次,创建server.js
, 编写下面的代码到其中:
import loader from './loader.js'
class Greeter {
async sayGreet(ctx) {
const { message } = ctx.request
return {
message: `hello ${message || 'world'}`
}
}
}
const start = async (addr) => {
await loader.init()
const server = await loader.initServer()
server.add('helloworld.Greeter', new Greeter())
await server.listen(addr)
console.log('gRPC Server is started: ', addr)
}
start('127.0.0.1:9099')
最后,创建client.js
, 编写下面的代码到其中:
import loader from './loader.js'
const start = async (addr) => {
await loader.init()
const clients = await loader.initClients({
services: {
'helloworld.Greeter': addr
}
})
const client = clients.get('helloworld.Greeter')
const result = await client.sayGreet({ message: 'greeter' })
console.log('sayGreet', result.response)
}
start('127.0.0.1:9099')
完成编程工作之后,就可以在终端里执行下面命令进行启动~
node ./server.js
node ./client.js
可通过访问 grpcity.js.org 查看完整的文档和示例。
Released under the MIT License.