首页 > 其他分享 >[gRPC] 关闭异步服务器

[gRPC] 关闭异步服务器

时间:2022-11-10 21:55:25浏览次数:95  
标签:异步 ok gRPC Next tag deadline 服务器 cq

[gRPC] 关闭异步服务器

在grpc的异步模式下,如何正确的关闭grpc服务呢?

一般来讲,我们使用异步模式时grpc会写一个主循环,轮询所有请求

void* tag;
bool ok;
while (likely(!(*force_quit))) {	// 参见代码规范中的中断处理
    cq.Next(&tag, &ok);	// 参考官网教程中的写法
    if (ok) {
        switch(tag) {	// 判断收到的是哪个请求
                ...
        }
    }
    else
        break;
}

那怎么中断这个循环呢?

  1. *force_quit=true,没用。因为cq.Next阻塞中,并不会返回。

  2. 参考gRPC: What is the recommended way to shut down an asynchronous server in C++? - Stack Overflow,需要分别执行cq.Shutdown()server.Shutdown,但我试了一下,还是会阻塞在cq.Next里。

    (无论cq和server哪个先Shutdown,最后都会阻塞住)

  3. 放弃使用cq.Next,改为使用cq.AsyncNext(&tag, &ok, deadline)。deadline是一个时间限制,超过时限后这个函数就会返回。这样就不用担心cq.Next永远阻塞的问题了。

改进后的写法:

void* tag;
bool ok;
gpr_timespec deadline;
deadline.clock_type = GPR_TIMESPAN;
deadline.tv_sec = 1;
deadline.tv_nsec = 0;

while (likely(!(*force_quit))) {	// 参见代码规范中的中断处理
    switch(cq.AsyncNext(&tag, &ok, deadline)) {
    	case ServerCompletionQueue::NextStatus::GOT_EVENT:
            if (ok) {
                switch(tag) {	// 判断收到的是哪个请求
                        ...
                }
            }
        default:
            break;
    }
}

标签:异步,ok,gRPC,Next,tag,deadline,服务器,cq
From: https://www.cnblogs.com/CQzhangyu/p/16878922.html

相关文章

  • 【gRpc】
    1、gRpcvsRest: 参考:https://www.baeldung.com/rest-vs-grpcRESTishandyinintegratingmicroservicesandthird-partyapplicationswiththecoresyste......
  • JavaWeb-02-web服务器
    2.web服务器2.1技术讲解ASP:微软:国内最早流行的就是ASP;在html中嵌入了VB的脚本ASP+COM;在ASP开发中,基本一个页面都有几千行的业务代码,页面及其混乱维护成本高C#I......
  • 固态硬盘(SSD)主机服务器是什么?为什么需要用SSD主机
    固态硬盘(SSD)主机服务器是什么?为什么需要用SSD主机你的网站加载时间太长了吗?你听说过固态硬盘服务器托管吗?它可以使你的网页加载速度提高20%什么是SSD主机服务器?要有一个......
  • Guava LoadingCache本地缓存的正确使用姿势——异步加载
    1.【背景】AB实验SDK耗时过高同事在使用我写的实验平台sdk之后,吐槽耗时太高,获取实验数据分流耗时达到700ms,严重影响了主业务流程的执行2.【分析】缓存为何不管用我记......
  • CentOS 7 修改 DNS 服务器
    原文:CentOS7修改DNS服务器–冰冰的小屋(16bing.com)在CentOS6系统想修改DNS我们都知道修改/etc/resolv.conf文件,添加上需要的DNS,并重启网卡即可vim/etc/......
  • spring mvc 请求异步处理,即时响应
    springmvc的controller,对于一个非常耗时的处理,让controller先异步返回响应给前端,后台继续慢慢执行完。@RequestMapping(value="refreshScore.do",method=Reque......
  • 白嫖永久服务器1668060025667
    阿贝云服务器注册免费领取1核1g内存5m宽带10g内存的云服务器,对于个人来说完全够用了。还有免费备案和虚拟主机,免备案对于搭建个人博客就很方便,部署了小项目上去,运行流畅不......
  • 白嫖永久服务器1668060067460
    阿贝云服务器注册免费领取1核1g内存5m宽带10g内存的云服务器,对于个人来说完全够用了。还有免费备案和虚拟主机,免备案对于搭建个人博客就很方便,部署了小项目上去,运行流畅不......
  • Golang GRPC 添加header
    GolangGRPC添加header创建grpc连接时添加header使用自建的metadata添加的headr信息:key:my-headervalue:"test01"funcmain(){conn,err:=grpc.Dial("......
  • 一个 MySQL 隐式转换的坑,差点把服务器整崩溃了
    我是风筝,公众号「古时的风筝」,专注于Java技术及周边生态。文章会收录在​​JavaNewBee​​中,更有Java后端知识图谱,从小白到大牛要走的路都在里面。本来是一个平静而......