Skip to content

Latest commit

 

History

History
84 lines (64 loc) · 2.73 KB

req_active.md

File metadata and controls

84 lines (64 loc) · 2.73 KB

主动Grpc

主动Grpc由Grpc框架提供与实现请求的接收等待以及重试,是Kritor最为推荐的请求方式。

元数据 (Metadata)

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"
    })
}

其它语言的请求示例