Server
Server 是gRPCity的核心功能之一,提供了服务端生命周期的接管能力。通过一系列的接口函数,
提供了从证书导入、服务绑定、中间件支持,服务启动和服务退出等全周期的管理API。
实例获取
// 获取 server 实例
const server = await loader.initServer(serverOptions)serverOptions 说明,包含如下参数:
channelOptions: 可选,通信配置规则;credentials: 可选,服务端证书;
💡
channelOptions在 Config 指南 里有详细讲解。
💡
credentials在 Credentials 指南 里有详细讲解。
服务绑定
// service rpc 绑定
server.add(name, implementation, options)参数说明:
name: (必填) 指proto文件路由,具体是到service的位置;implementation: (必填) 携带 service rpc 定义好的方法的对象或者类;options: (可选) object:exclude: (可选) 字符串数组,排除implementation中不需要参与service rpc绑定的方法;inherit: (可选) 如果implementation通过继承的方式获得的func,父类也要参与绑定,把父类传入该参数即可;
服务解绑
// service rpc 解绑
server.remove(name)参数说明:
name: (必填) 指proto文件路由,具体是到service的位置;
添加中间件
server.use()提供了implementation 前后处理的中间件能力,更多详情查看 Middleware 指南
// implementation 中间件支持
// 逐个添加
server.use(f1)
server.use(f2)
server.use(f3)
// 传入多个参数添加
server.use(f1, f2, f3)
// 使用数组添加
server.use([f1, f2, f3])⚠️
注意: 当前版本只有 async 的方法支持中间件,callback 暂不支持。
证书与启动
服务启动 listen 支持两个参数,分别是addr和credentials:
addr: (必填) 服务启动需要监听的地址和端口,支持类型如下,任选一个:- string: ip+port 格式,如
127.0.0.1:9099; - object:
{ host, port };- host: 字符串,支持 ip 和域名;
- port: 数字,最小值为0,最大值为65535;
- string: ip+port 格式,如
credentials: (可选) 使用loader.makeServerCredentials()来生成,并给listen调用;
// 服务端证书
const credentials = server.makeServerCredentials(rootCerts, keyCertPairs, checkClientCertificate)
// 服务启动
await server.listen(addr, credentials)
// or
// await server.listen('127.0.0.1:9099', credentials)
// await server.listen({ host: '127.0.0.1', port: 9099 }, credentials)⚠️
credentials的优先级:listen()里的最高,其次是initServer(),最后是默认。
服务退出
shutdown() 需要使用async来保证异步执行完成,而forceShutdown不需要。
// 服务优雅退出
await server.shutdown()
// 服务强制退出
server.forceShutdown()