主动Grpc由Grpc框架提供与实现请求的接收等待以及重试,是Kritor最为推荐的请求方式。
Kritor端的响应和事件推送均包含以下元数据:
名称 | 解释 |
---|---|
kritor-self-uin | kritor端uin |
kritor-self-uid | kritor端uid |
kritor-self-version | kritor端实现及其版本 |
Grpc提供了挂起/堵塞
和异步
的两种请求方式。
suspend fun main() {
val channel = ManagedChannelBuilder
.forAddress("localhost", 8080)
.usePlaintext()
.enableRetry() // 允许尝试
.executor(Dispatchers.IO.asExecutor()) // 使用协程的调度器
.build()
val observer: StreamObserver<AuthRsp> = object: StreamObserver<AuthRsp> {
override fun onCompleted() {
}
override fun onNext(rsp: AuthRsp?) {
// doSomething
}
override fun onError(e: Throwable?) {
}
}
AuthenticationGrpc.newStub(channel).auth(authReq {
account = "1145141919810"
ticket = "A123456"
}, observer)
}
suspend fun main() {
val channel = ManagedChannelBuilder
.forAddress("localhost", 8080)
.usePlaintext()
.enableRetry() // 允许尝试
.executor(Dispatchers.IO.asExecutor()) // 使用协程的调度器
.build()
val stub = AuthenticationGrpcKt.AuthenticationCoroutineStub(channel)
val rsp = stub.auth(authReq {
account = "1145141919810"
ticket = "A123456"
})
}