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()