首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GRPC双向流在没有消息的情况下在1分钟后关闭。

GRPC双向流在没有消息的情况下在1分钟后关闭。
EN

Stack Overflow用户
提问于 2021-07-02 18:44:45
回答 1查看 1.2K关注 0票数 1

我正在使用服务器打开一个GRPC双向流(具体而言,python3.8)。在从服务器获得一些数据之后,我必须完成一个耗时的任务(大约需要3分钟)。在执行此操作时,我将保持通道打开,以便在任务完成后立即将结果发送到服务器。

在服务器最后一条消息发出1分钟后,我的连接就关闭了。我得到了这个错误

代码语言:javascript
复制
<AioRpcError of RPC that terminated with:
    status = StatusCode.INTERNAL
    details = "Received RST_STREAM with error code 1"
    debug_error_string = "{"created":"@1625250019.779494905","description":"Error received from peer ipv4:3.101.44.139:443","file":"src/core/lib/surface/call.cc","file_line":1066,"grpc_message":"Received RST_STREAM with error code 1","grpc_status":13}"
>

对我来说好像是超时了。我是grpc的初学者。我引用了这篇文章,并给我的频道提供了本文中指定的客户端选项,每个数目都接近5分钟。但这并没有改变什么。有人能帮我了解一下这里发生了什么,我该怎么解决这个问题吗?

TL;博士

我与服务器的连接是一个异步安全通道。请注意,我的两个流是独立的,这就是为什么我必须做async

代码语言:javascript
复制
channel=grpc.aio.secure_channel(address, credentials=creds, options=options)

我有两条协同线,一条是等待长时间运行的任务被清除,另一条是双向流上的接收和感知消息。

代码语言:javascript
复制
def parse_response(resp):
    # collect data from server response
    # make `task_available=True` when all data is received

async def stream_handler():
    stub = TaskServiceStub(channel)
    req_gen = get_requests()  # An async generator for request messages
    stream: grpc.aio.StreamStreamCall = stub.Task(req_gen)
    
    async for resp in stream.__aiter__():
        parse_response(resp)

async def task_handler():
    if task_available:
        do_task()

async def main():
    await asyncio.gather(stream_handler(), task_handler())
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68230023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档