当前位置: 首页 > news >正文

做优秀网站学新媒体运营最好的培训学校

做优秀网站,学新媒体运营最好的培训学校,江干区网站建设,怎样建设和维护网站在Provider的实现中,OnMessage函数中,处理接收到的连接RPC请求。将接收到的RPC请求(包含请求的对象,请求方法和 请求参数),接收到这些信息之后进行反序列化。得到这些参数之后我们即将要做的事情是去调用相…

 在Provider的实现中,OnMessage函数中,处理接收到的连接RPC请求。将接收到的RPC请求(包含请求的对象,请求方法和 请求参数),接收到这些信息之后进行反序列化。得到这些参数之后我们即将要做的事情是去调用相应的函数。怎么调用呢???

我们调用的方法名字如下,方法参数如下,需要根据发送来的信息找到该函数。

  void Login(::google::protobuf::RpcController* controller,const ::fixbug::LoginRequest* request,::fixbug::LoginResponse* response,::google::protobuf::Closure* done){// 框架给业务上报了请求参数LoginRequest,应用获取相应数据做本地业务std::string name = request->name();std::string pwd = request->pwd();// 做本地业务bool login_result = Login(name, pwd); // 把响应写入  包括错误码、错误消息、返回值fixbug::ResultCode *code = response->mutable_result();code->set_errcode(0);code->set_errmsg("");response->set_sucess(login_result);// 执行回调操作   执行响应对象数据的序列化和网络发送(都是由框架来完成的)done->Run();}

google::protobuf::Service *service = it->second.m_service; // 获取service对象  new UserServiceconst google::protobuf::MethodDescriptor *method = mit->second; // 获取method对象  Login// 生成rpc方法调用的请求request和响应response参数google::protobuf::Message *request = service->GetRequestPrototype(method).New();if (!request->ParseFromString(args_str)){std::cout << "request parse error, content:" << args_str << std::endl;return;}google::protobuf::Message *response = service->GetResponsePrototype(method).New();// 给下面的method方法的调用,绑定一个Closure的回调函数google::protobuf::Closure *done = google::protobuf::NewCallback<RpcProvider, const muduo::net::TcpConnectionPtr&, google::protobuf::Message*>(this, &RpcProvider::SendRpcResponse, conn, response);// 在框架上根据远端rpc请求,调用当前rpc节点上发布的方法// new UserService().Login(controller, request, response, done)service->CallMethod(method, nullptr, request, response, done);
}// Closure的回调操作,用于序列化rpc的响应和网络发送
void RpcProvider::SendRpcResponse(const muduo::net::TcpConnectionPtr& conn, google::protobuf::Message *response)
{std::string response_str;if (response->SerializeToString(&response_str)) // response进行序列化{// 序列化成功后,通过网络把rpc方法执行的结果发送会rpc的调用方conn->send(response_str);}else{std::cout << "serialize response_str error!" << std::endl; }conn->shutdown(); // 模拟http的短链接服务,由rpcprovider主动断开连接
}

 我们需要调用的函数如下:

  void Login(::google::protobuf::RpcController* controller,const ::fixbug::LoginRequest* request,::fixbug::LoginResponse* response,::google::protobuf::Closure* done)

 首先获取调用的服务对象和方法:

 google::protobuf::Service *service = it->second.m_service; // 获取service对象  new UserService

    const google::protobuf::MethodDescriptor *method = mit->second; // 获取method对象  Login

 获取方法的参数:request和response,这些

google::protobuf::Message *request = service->GetRequestPrototype(method).New();

    if (!request->ParseFromString(args_str))

    {

        std::cout << "request parse error, content:" << args_str << std::endl;

        return;

    }

    google::protobuf::Message *response = service->GetResponsePrototype(method).New();

http://www.15wanjia.com/news/8305.html

相关文章:

  • 用ps做网站网页第三波疫情将全面大爆发
  • 中国十大网站建设企业站长工具网站
  • 永州网站建设企业独立站seo建站系统
  • 淘宝客app定制seo计费系统源码
  • 太原网站制作在线青岛网站建设公司
  • 做的网站有营销效果吗广州白云区最新信息
  • 高端网站官网企业网站设计论文
  • 成都企业网站建设 四川冠辰科技个人主页网页设计
  • 北京自己怎样做网站如何修改百度上面的门店号码
  • 社区类网站开发廊坊seo推广公司
  • 新安县做网站成人英语培训
  • 做网站域名还重要吗产品推广策划方案怎么做
  • 电子商务网站开发形式选择有没有自动排名的软件
  • 网站开发设计选题背景经典软文
  • 如何做百度站长绑定网站营销方式有哪几种
  • 加强政务公开与网站建设网站建设公司排名
  • 成都网站建设服务公司武汉seo首页
  • 南京高端网站建设工作室b站推广软件
  • 广州番禺网站公司竞价排名什么意思
  • 如何做微信个人网站白帽seo是什么
  • 河北建设网上办事大厅系统优化大师免费版
  • 大型综合门户网站开发网络营销企业是什么
  • 网站开发demo是什么百中搜优化软件
  • 做网站招标黄页88网官网
  • html网页制作内容浙江seo
  • 企业网站 价格网站推广优化外包公司哪家好
  • 怎么才能建立网站电商代运营公司排名
  • 珠海门户网站建设公司电商网站前端页面内容编写
  • 交互式网站有哪些功能seo免费自学的网站
  • 长春美容网站建设永久免费进销存管理软件手机版