Skip to content
文档
Server

Server

Server 是gRPCity的核心功能之一,提供了服务端生命周期的接管能力。通过一系列的接口函数, 提供了从证书导入、服务绑定、中间件支持,服务启动和服务退出等全周期的管理API。

实例获取

// 获取 server 实例
const server = await loader.initServer(serverOptions)

serverOptions 说明,包含如下参数:

  • channelOptions: 可选,通信配置规则;
  • credentials: 可选,服务端证书;
💡

channelOptionsConfig 指南 里有详细讲解。

💡

credentialsCredentials 指南 里有详细讲解。

服务绑定

// 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 支持两个参数,分别是addrcredentials:

  • addr: (必填) 服务启动需要监听的地址和端口,支持类型如下,任选一个:
    • string: ip+port 格式,如 127.0.0.1:9099
    • object: { host, port }
      • host: 字符串,支持 ip 和域名;
      • port: 数字,最小值为0,最大值为65535;
  • 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()