brpc icon indicating copy to clipboard operation
brpc copied to clipboard

brpcServer 异步处理

Open yming000 opened this issue 2 years ago • 6 comments

用echo.proto中的Echo举例,我的需求是,在Echo()运行完后,server能够直接运行一个业务函数,求各位大佬多多指教

yming000 avatar Nov 14 '23 02:11 yming000

看下这个https://github.com/apache/brpc/pull/2328 满足需求吗

leaf-potato avatar Nov 15 '23 06:11 leaf-potato

那么是在Echo 处理函数中回复了Echo response,同时启动一个线程来运行你的业务函数就行了吧

thorneliu avatar Nov 17 '23 10:11 thorneliu

那么是在Echo 处理函数中回复了Echo response,同时启动一个线程来运行你的业务函数就行了吧

想了解brpc有没有预留这样的借口,自己起线程,感觉在程序退出时,可能会有资源访问core问题

yming000 avatar Nov 21 '23 11:11 yming000

看下这个#2328 满足需求吗

谢谢 我学习一下

yming000 avatar Nov 22 '23 03:11 yming000

那么是在Echo 处理函数中回复了Echo response,同时启动一个线程来运行你的业务函数就行了吧

想了解brpc有没有预留这样的借口,自己起线程,感觉在程序退出时,可能会有资源访问core问题

运行done->Run()后request和response都会被析构,如果在单独业务线程中会访问req和resp会有问题

leaf-potato avatar Nov 22 '23 06:11 leaf-potato

那么是在Echo 处理函数中回复了Echo response,同时启动一个线程来运行你的业务函数就行了吧

想了解brpc有没有预留这样的借口,自己起线程,感觉在程序退出时,可能会有资源访问core问题

运行done->Run()后request和response都会被析构,如果在单独业务线程中会访问req和resp会有问题

Hi,如果是这样,你应该拓展done的生命周期,类似这样:

void ChatServiceImpl::Syn(google::protobuf::RpcController *cntl_base,
                          const HttpRequest *, HttpResponse *,
                          google::protobuf::Closure *done) {

  brpc::ClosureGuard done_guard(done);
  brpc::Controller *cntl = static_cast<brpc::Controller *>(cntl_base);

  auto job = std::make_shared<Asyncjob>();
  ...
  job->cntl = cntl;
  job->done = done_guard.release();

  infer_job_scheduler_->noNewJob(job);
  ...
}

thorneliu avatar Nov 27 '23 01:11 thorneliu