Server

brpc::Server:默认构造后的Server不包含任何服务,也不会对外提供服务,仅仅是个对象。

methods:

       AddService();SERVER_OWNS_SERVICE/SERVER_DOESNT_OWN_SERVICE区别在于局部变量与动态申请变量

     Start();一个server只能监听一个端口(不考虑ServerOptions.internal_port)

     Stop()/Join();Stop不会阻塞,Join会,分成两个函数的原因在于多个Server需要退出时,可以先全部Stop再一起Join。在Server退出时,对新请求立刻回复ELOGOFF错误以防止新请求加入,当客户端看到错误后,会跳过对应的Server,并在其他Server上重试对应的请求。

     RunUntilAskedToQuit();可以在大部分情况下简化server的运行和停止代码(wait until ctrl-c is pressed,then stop and join the server),join完成后可以修改其中的Service并重新Start

     早期的brpc允许一个pb service被http协议访问时不设置bp请求,即使里面有required字段(一般来说这个service会自动解析http请求和设置http回复,并不会访问pb请求),新版本设置opt.allow_http_body_to_pb= falsse,允许不把http body自动转化为pb request(客户端协议类型不能时http,应该说是baidu_std或者hulu_pbrpc)。

     ServerOptions.idle_timeout_sec:如果一个链接在对应的时间内没有读取或写入数据,则被视为闲置,而被server主动关闭,默认-1,代表不开启

     ServerOptions.pid_file:如果设置此字段,server启动时会创建同名文件,内容为进程号,默认为空

     ServerOptions.auth:把实现的Authenticator实例赋值给auth

     并发可能有两种含义:一种是连接数,一种是同时在处理的请求数。第一种可能是在server监听池这种情况,这里提到的是后者。brpc支持设置server级和method级的最大并发,当server或method同时处理的请求数超过并发限制时,它会立刻给他client回复brpc::ELIMIT错误,而不会调用服务回调。(brpc的请求运行在bthread中,M个bthread会映射至N个worker中)

     ServerOptions.num_threads:仅仅是个提示,因为进程内的所有Server和Channel会共享线程资源,线程总是ServerOptions.num_threads和-bthread_concurrency中的最大值。另外brpc不区分IO线程和处理线程。

     ServerOptions.max_concurrency:默认值0代表不限制,访问内置服务不受此选项限制。

     Server.ResetMaxConcurrency():可在server启动后动态修改server级别的max_concurrency

     Server.MaxConcurrencyOf():可设置method级别的max_concurrency(server.MaxConcurrencyOf("method")= num),此设置一般发生在AddService后面,server启动前,当设置失败时可能时对应method不存在。

     当method级别和server级别的max_concurrency都被设置时,先检查server级别再检查method级别。

     ServerOptions.internal_port:设置内部端口,设为一个仅允许内网访问的端口(注意从外部访问内部端口,可能会返回内部server地址)

     TLS(thread-local storage):其中之一,为了缓存频繁访问的对象以避免反复创建。另一种则是为了在全局函数间隐式传递状态。

      session-local:session-local data与一次server端RPC绑定,从进了service回调开始,到调用server端的done结束,不管该service是否同步还是异步处理(设置ServerOptions.session_local_data_factory后访问Controller.session_local_data即可获得session data)

      server-thread-local:server-thread-loca与一次service回调绑定,从进service回调开始,到出service回调结束(与session-local的区别,session-local data得从server端的Controller获取,server-thread-local可以在任意函数中获得,只要这个函数直接或间接地运行在server线程中。当同步时基本没差别,session需要Controller创建,后者调用brpc::thread_local_data(),当异步时,且需要在done->Run()中访问数据,这时只能用到session-local,因为server-thread-local在service回调外已经失效了)

      bthread-local:bthread_key_create,bthread_key_destroy,bthread_getspecific,bthread_setpecific等函数。由于brpc会为每个请求建立一个bthread,server中的thread-loca行为特殊:一个server创建的bthread在退出时并不删除bthread-local,而是返回server的一个pool,以被其他的bthread复用,这就可以避免bthread-loca随着bthread的创建和退出而不停的构造和析构。

      

 

转载于:https://www.cnblogs.com/Call-C/p/8284919.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值