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

无锡百度网站推广渠道有没有做字的网站

无锡百度网站推广渠道,有没有做字的网站,建设路街道办事处门户网站,网页制作基础教程代码目录 1.介绍2.安装3.类与接口介绍1.日志输出类与接口2.ProtoBuf类与接口3.服务端类与接口4.客户端类与接口 4.使用0.一般流程1.Server2.客户端 -- 同步调用3.客户端 -- 异步调用 1.介绍 brpc是用C编写的工业级RPC框架#xff0c;常用于搜索、存储、机器学习、广告、推荐等高性… 目录 1.介绍2.安装3.类与接口介绍1.日志输出类与接口2.ProtoBuf类与接口3.服务端类与接口4.客户端类与接口 4.使用0.一般流程1.Server2.客户端 -- 同步调用3.客户端 -- 异步调用 1.介绍 brpc是用C编写的工业级RPC框架常用于搜索、存储、机器学习、广告、推荐等高性能系统具体理解RPC是远程调用框架 以前都是将数据的处理过程直接在本地封装实现进行调用完成功能RPC框架远程调用的思想不一样是将数据处理的过程交给服务器来执行 使用场景 搭建能在一个端口支持多协议的服务或访问各种服务Server能同步或异步处理请求Client支持同步、异步、半同步或使用组合channels简化复杂的分库或并发访问通过http界面调试服务使用cpu, heap, contention profilers获得更好的延时和吞吐把组织中使用的协议快速地加入brpc或定制各类组件包括命名服务(dns, zk, etcd)负载均衡(rr, random, consistent hashing) 对比其他RPC框架 grpc 开发者Google语言支持C、Java、Python、Go序列化PB文档较为完善没有中文文档编译问题主要是需要下载submodule问题服务端推送不支持异步调用 异步客户端需要用户自己创建消费线程使用起来较为麻烦支持异步服务器 流式传输(大块数据传输)支持接口简单易用易用性 简单易用支持跨语言跨平台 brpc 开发者baidu语言支持C序列化PB文档较为完善有中文文档编译问题基本没有问题服务端推送支持但支持的不好是通过一次长的RPC调用实现的异步调用通过回调函数支持客户端异步调用流式传输(大块数据传输)支持接口稍微比较原生易用性 提供简洁的API和友好的使用文档易于上手在sofa-prpc基础上加了一些封装比如资源管理等更易用 srpc 开发者sogou语言支持C序列化PB、Thift文档文档略显简略没有独立网站都托管在Github编译问题基本没有问题服务端推送不支持异步调用 支持异步客户端通过workflow支持异步服务器 流式传输(大块数据传输)不支持易用性专注于异步编程性能较高用起来更复杂一些 sofa-pbrpc 开发者baidu语言支持C、Java序列化PB文档官方文档较少编译问题编译存在问题依赖的库版本都比较老服务端推送不支持异步调用通过回调函数支持客户端异步调用流式传输(大块数据传输)不支持易用性 轻量化接口简单容易使用 2.安装 依赖安装sudo apt-get install -y libssl-dev libprotobuf-dev libprotoc-dev protobuf-compiler libleveldb-dev安装brpcgit clone https://github.com/apache/brpc.git cd brpc/ mkdir build cd build cmake DCMAKE_INSTALL_PREFIX/usr .. cmake --build . -j6 make sudo make install3.类与接口介绍 1.日志输出类与接口 包含头文件#include butil/logging.h日志输出这里本质上用不着brpc的日志输出因此这里主要介绍如何关闭日志输出namespace logging { enum LoggingDestination { LOG_TO_NONE 0 };struct BUTIL_EXPORT LoggingSettings { LoggingSettings(); LoggingDestination logging_dest; }; bool InitLogging(const LoggingSettings settings); }2.ProtoBuf类与接口 RpcController上下文管理类目前主要用于判断RPC请求是否是OK的Closure 客户端主要用于设置异步处理回调服务端通过Run()宣告请求处理完毕 namespace google { namespace protobuf { class PROTOBUF_EXPORT Closure { public: Closure() {} virtual ~Closure(); virtual void Run() 0; };inline Closure* NewCallback(void (*function)()); class PROTOBUF_EXPORT RpcController { bool Failed(); std::string ErrorText() ; } } } 3.服务端类与接口 此处只介绍主要用到的成员与接口Server服务器类ServerOptions服务器参数配置类ClosureGuardClosure对象的智能管理类Controller管理RPC调用的上下文和状态 它提供了一些方法和属性来控制和检查RPC调用的状态、错误信息、超时设置 namespace brpc { struct ServerOptions { //无数据传输则指定时间后关闭连接 int idle_timeout_sec; // Default: -1 (disabled) int num_threads; // Default: #cpu-cores //.... }enum ServiceOwnership { //添加服务失败时服务器将负责删除服务对象 SERVER_OWNS_SERVICE, //添加服务失败时服务器也不会删除服务对象 SERVER_DOESNT_OWN_SERVICE };class Server { int AddService(google::protobuf::Service* service, ServiceOwnership ownership); int Start(int port, const ServerOptions* opt); int Stop(int closewait_ms/*not used anymore*/); int Join(); //休眠直到ctrlc按下或者stop和join服务器 void RunUntilAskedToQuit(); };class ClosureGuard { explicit ClosureGuard(google::protobuf::Closure* done); ~ClosureGuard() { if (_done) _done-Run(); } };class HttpHeader { void set_content_type(const std::string type) const std::string* GetHeader(const std::string key) void SetHeader(const std::string key, const std::string value); const URI uri() const { return _uri; } HttpMethod method() const { return _method; } void set_method(const HttpMethod method) int status_code() void set_status_code(int status_code); };class Controller : public google::protobuf::RpcController { void set_timeout_ms(int64_t timeout_ms); void set_max_retry(int max_retry); google::protobuf::Message* response(); HttpHeader http_response(); HttpHeader http_request(); bool Failed(); std::string ErrorText(); using AfterRpcRespFnType std::function void(Controller* cntl, const google::protobuf::Message* req, const google::protobuf::Message* res); void set_after_rpc_resp_fn(AfterRpcRespFnType fn) }; }4.客户端类与接口 Channel客户端与服务器网络通信信道类ChannelOptions信道配置类 namespace brpc { struct ChannelOptions { //请求连接超时时间 int32_t connect_timeout_ms;// Default: 200 (milliseconds) //rpc请求超时时间 int32_t timeout_ms;// Default: 500 (milliseconds) //最大重试次数 int max_retry;// Default: 3 //序列化协议类型 options.protocol baidu_std; AdaptiveProtocolType protocol; //.... };class Channel : public ChannelBase { //初始化接口成功返回0 int Init(const char* server_addr_and_port, const ChannelOptions* options); }; }4.使用 0.一般流程 服务端 创建RPC服务子类继承PB中的EchoService服务类并实现内部的业务接口逻辑创建RPC服务器对象搭建服务器向服务器类中添加RPC子服务对象告诉服务器收到什么请求用哪个接口处理启动服务器 客户端 创建网络通信信道实例化PB中的EchoService_Stub类对象发起RPC请i去获取响应进行处理 makefileall: server client_sync client_asyncserver: server.cc main.pb.ccg -o $ $^ -stdc17 -lbrpc -lgflags -lssl -lcrypto -lprotobuf -lleveldbclient_sync: client_sync.cc main.pb.ccg -o $ $^ -stdc17 -lbrpc -lgflags -lssl -lcrypto -lprotobuf -lleveldbclient_async: client.async.cc main.pb.ccg -o $ $^ -stdc17 -lbrpc -lgflags -lssl -lcrypto -lprotobuf -lleveldb.PHONY:clean clean:rm server client_sync client_async1.Server #include brpc/server.h #include butil/logging.h #include main.pb.h// 继承于EchoService, 创建一个子类, 并实现RPC调用的业务功能 class EchoServiceImpl : public SnowK::EchoService { public:EchoServiceImpl(){}~EchoServiceImpl(){}void Echo(google::protobuf::RpcController *controller,const ::SnowK::EchoRequest *request,::SnowK::EchoResponse *response,::google::protobuf::Closure *done){brpc::ClosureGuard rpc_guard(done);std::cout 收到消息: request-message() std::endl;std::string str request-message() --响应;response-set_message(str);// done-Run(); // 已经有了ClosureGuard, 则不再需要} };int main(int argc, char* argv[]) {// 0.关闭brpc的默认日志输出logging::LoggingSettings settings;settings.logging_dest logging::LoggingDestination::LOG_TO_NONE;logging::InitLogging(settings);// 1.构造服务器对象brpc::Server server;// 2.向服务器对象中新增EchoService服务EchoServiceImpl echo_service;if (server.AddService(echo_service, brpc::ServiceOwnership::SERVER_DOESNT_OWN_SERVICE) -1){std::cout 添加Rpc服务失败! std::endl;return -1;}// 3.启动服务器brpc::ServerOptions options;options.idle_timeout_sec -1; // 连接空闲超时时间, 超时后连接被关闭options.num_threads 1; // IO线程数量if(server.Start(3366, options) -1){std::cout 启动服务器失败 std::endl;return -1;}server.RunUntilAskedToQuit(); // 修改等待运行结束return 0; }2.客户端 – 同步调用 同步调用客户端会阻塞收到server端的响应或发生错误#include brpc/channel.h #include main.pb.hint main(int argc, char* argv[]) {// 1.构造Channel信道, 连接服务器brpc::ChannelOptions options;options.connect_timeout_ms -1; // 连接等待超时时间, -1表示一直等待options.timeout_ms -1; // RPC请求等待超时时间, -1表示一直等待options.max_retry 3; // 请求重试次数options.protocol baidu_std; // 序列化协议, 默认使用baidu_stdbrpc::Channel channel;if(channel.Init(127.0.0.1:3366, options) -1){std::cout 初始化信道失败 std::endl;return -1;}// 2.构建EchoService_Stub对象, 用于进行RPC调用SnowK::EchoService_Stub stub(channel);// 3.进行RPC调用SnowK::EchoRequest req;req.set_message(Hello SnowK);brpc::Controller *cntl new brpc::Controller();SnowK::EchoResponse *resp new SnowK::EchoResponse();stub.Echo(cntl, req, resp, nullptr); // nullptr为同步调用if(cntl-Failed()){std::cout RPC调用失败 cntl-ErrorText() std::endl;return -1;}std::cout 收到响应: resp-message() std::endl;delete cntl;delete resp;return 0; }3.客户端 – 异步调用 异步调用指客户端注册一个响应处理回调函数 当调用一个RPC接口时立即返回 不会阻塞等待响应 当Server端返回响应时会调用传入的回调函数处理响应具体做法 给CallMethod传递一个额外的回调对象doneCallMethod在发出request后就结束了而不是在RPC结束后当server端返回response或发生错误(包括超时)时done-Run()会被调用 对RPC的后续处理应该写在done-Run()里而不是CallMethod后 由于CallMethod结束不意味着RPC结束response/controller仍可能被框架及done-Run()使用它们一般得创建在堆上 并在done-Run()中删除 如果提前删除了它们那当done-Run()被调用时将访问到无效内存 #include thread #include brpc/channel.h #include main.pb.hvoid Callback(brpc::Controller* cntl, SnowK::EchoResponse* resp) {std::shared_ptrbrpc::Controller cntl_guard(cntl);std::shared_ptrSnowK::EchoResponse resp_guard(resp);if (cntl-Failed()){std::cout RPC调用失败 cntl-ErrorText() std::endl;return;}std::cout 收到响应: resp-message() std::endl; }int main(int argc, char *argv[]) {// 1.构造Channel信道, 连接服务器brpc::ChannelOptions options;options.connect_timeout_ms -1; // 连接等待超时时间, -1表示一直等待options.timeout_ms -1; // RPC请求等待超时时间, -1表示一直等待options.max_retry 3; // 请求重试次数options.protocol baidu_std; // 序列化协议, 默认使用baidu_stdbrpc::Channel channel;if (channel.Init(127.0.0.1:3366, options) -1){std::cout 初始化信道失败 std::endl;return -1;}// 2.构建EchoService_Stub对象, 用于进行RPC调用SnowK::EchoService_Stub stub(channel);// 3.进行RPC调用SnowK::EchoRequest req;req.set_message(Hello SnowK);brpc::Controller *cntl new brpc::Controller();SnowK::EchoResponse *resp new SnowK::EchoResponse();auto closure google::protobuf::NewCallback(Callback, cntl, resp);stub.Echo(cntl, req, resp, closure); // 异步调用std::cout 异步调用结束 std::endl;std::this_thread::sleep_for(std::chrono::seconds(3));return 0; }
http://www.sczhlp.com/news/189483/

相关文章:

  • 成都市建设局网站深圳企业网站建设公司
  • wordpress 网站统计插件下载吉安县规划建设局网站
  • 如何申请一个网站 做视频上海营销型网站标准
  • 便宜网站建设怎么样医院网站建设网站
  • 国内做的比较好的协会网站免费做游戏小程序的网站
  • 企业网站推广制作教程企业建站用什么好
  • 如何做一张网站平面效果图怎样下载别人网站自己做的视频
  • 营销网站外包广东东莞建设网
  • 网站建设合同浩森宇特网站服务器做缓存吗
  • 汽车网站网页模板做app推广上哪些网站吗
  • 一级a做爰片免费的网站有吗晋江原创网
  • 开源软件站
  • 如何安装claude code以及ccr code
  • 代码托管平台
  • 1011
  • 209. 长度最小的子数组 滑动窗口+暴力
  • 临漳网站制作谁有企业邮箱
  • 西宁做网站多少钱辽宁建设工程信息网评定分离规则
  • pr效果做的好的网站有哪些网页界面设计中一般使用的分辨率是多少
  • 蚌埠网站设计网站管理员招聘
  • 网站术语南宁网站设计多少钱一个
  • 网站制作大概需要多少钱阿里云邮箱企业邮箱
  • 福州网站建设加q479185700安阳信息港网站
  • 苏州高端网站设计制作百度收录查询代码
  • 黑色网站模板南宁seo外包平台
  • wordpress标题序号兰州网站优化
  • 163手机移动网站网站建设与管理策划书
  • 网站文章模块网站空间注册
  • 重庆网站优化服务群晖wordpress错乱
  • 大良营销网站建设行情开发三味风车动漫无修