Industrial-grade RPC framework used throughout Baidu, with 1,000,000+ instances and thousands kinds of services. "brpc" means "better RPC".

Overview

中文版

Build Status

brpc

An industrial-grade RPC framework used throughout Baidu, with 1,000,000+ instances(not counting clients) and thousands kinds of services. "brpc" means "better RPC".

You can use it to:

Try it!

Contribute code

Please refer to here.

Feedback and Getting involved

Issues
  • http2 / grpc问题

    http2 / grpc问题

    Describe the bug (描述bug) [E2004]remote_window_left is not enough, data_size=629370 [R1][E2004]remote_window_left is not enough, data_size=629370 W0403 10:03:43.719316 12510 http2_rpc_protocol.cpp:206] Unknown setting, id=65027 value=1

    To Reproduce (复现方法) http2 client连 grpc服务端,传输大小600KB

    Expected behavior (期望行为)

    Versions (各种版本) OS: centos 7 Compiler: gcc4.8 brpc: 0.9.5 protobuf: 3.5

    Additional context/screenshots (更多上下文/截图)

    传输数据大了,该怎么改?

    opened by yjhjstz 27
  • 在brpc接口内部core,但是使用gdb分析时遇到问题

    在brpc接口内部core,但是使用gdb分析时遇到问题

    #include <string>
    std::stof("a");
    

    在brpc接口内部使用该方法,导致服务core。通过分析core有办法能直接定位到哪一行出现的问题吗?

    使用gdb打开core文件,bt后得到下面的信息:

    (gdb) bt
    #0  0x00007f98eb2b11f7 in raise () from /lib64/libc.so.6
    #1  0x00007f98eb2b28e8 in abort () from /lib64/libc.so.6
    #2  0x0000000000a7a6b5 in __gnu_cxx::__verbose_terminate_handler() ()
    #3  0x0000000000a23406 in __cxxabiv1::__terminate(void (*)()) ()
    #4  0x0000000000a7a159 in __cxa_call_terminate ()
    #5  0x0000000000a232f4 in __gxx_personality_v0 ()
    #6  0x0000000000a7eeb3 in _Unwind_RaiseException_Phase2 ()
    #7  0x0000000000a7f6a7 in _Unwind_Resume ()
    #8  0x00000000007bdd2a in operator() (this=<optimized out>, obj=<optimized out>) at ./src/brpc/destroyable.h:33
    #9  ~unique_ptr (this=<synthetic pointer>, __in_chrg=<optimized out>) at /usr/include/c++/4.8.2/bits/unique_ptr.h:184
    #10 ~DestroyingPtr (this=<synthetic pointer>, __in_chrg=<optimized out>) at ./src/brpc/destroyable.h:39
    #11 brpc::policy::ProcessRpcRequest (msg_base=<optimized out>) at src/brpc/policy/baidu_rpc_protocol.cpp:508
    #12 0x00000000008df7fa in brpc::ProcessInputMessage ([email protected]=0x7f98a8021930) at src/brpc/input_messenger.cpp:132
    #13 0x00000000008e07e4 in operator() (this=<optimized out>, last_msg=0x7f98a8021930) at src/brpc/input_messenger.cpp:138
    #14 brpc::InputMessenger::OnNewMessages (m=0x7f987401ac80) at /usr/include/c++/4.8.2/bits/unique_ptr.h:184
    #15 0x00000000008d04ed in brpc::Socket::ProcessEvent (arg=0x7f987401ac80) at src/brpc/socket.cpp:1049
    #16 0x000000000071c1f4 in bthread::TaskGroup::task_runner (skip_remained=<optimized out>) at src/bthread/task_group.cpp:291
    #17 0x0000000000834791 in bthread_make_fcontext ()
    #18 0x0000000000000000 in ?? ()
    

     

    wontfix 
    opened by adanteng 25
  • fix rpc_press can't send request equably

    fix rpc_press can't send request equably

    项目中利用rpc_press进行压测,出现服务衰减问题,即压测过程中服务性能越变越差。后来通过分析发现rpc_press压测工具的实现存在问题,网络或者CPU抖动造成的发送请求不均匀会一直保存在窗口中,并影响后续请求,随程序运行时间变长,抖动出现的次数越来越多,发送地请求会越来越不均匀。具体分析如下:

    举例说明:假设 QPS: 100,异步发送请求平均耗时 1ms,为方便画图,假设队列最大长度为10。

    图(1) 中发送编号为4的请求时CPU或者网络抖动,造成本应在t+31发出的请求滞后了15ms,按照代码逻辑,编号为5/6的请求分别在t + 47 和 t + 51发出

    图(2) 我们假设队列最大长度为10,按照图上的计算过程可以得到,发送完请求14后会sleep 24ms,这样就导致发送请求4时的抖动,对请求15发送时间造成了影响,抖动会在队列中一直存在。QPS越高,请求间隔越短,这个问题越容易出现。 image 本pull request利用一种更简单的方式来计算请求间隔,来解决上述问题。

    opened by bumingchun 21
  • 上线brpc之后,集群同一个时刻访问下游服务出现集体超时现象

    上线brpc之后,集群同一个时刻访问下游服务出现集体超时现象

    Describe the bug (描述bug)

    上线brpc之后,集群偶尔会出现(一天出现)同一个时刻访问下游服务出现集体超时现象,同一时刻网卡出入流量掉一个大坑,整个过程1分钟之内可以自动恢复,同时也发现访问下游服务rpc调用耗时远远超出设置的timeout,甚至出现访问某些下游出现20s的现象,整个过程cpu远远没有达到瓶颈,排查过业务代码,业务代码只有一个地方用到锁,同时也没有除了rpc其他外部服务的流程。问下造成这种想象的原因可能是啥?谢谢

    To Reproduce (复现方法) 暂时找不到很好的复现方法!

    Expected behavior (期望行为)

    Versions (各种版本) OS:centos7.4 Compiler:gcc5.2 brpc:release1.0 protobuf:2.5

    Additional context/screenshots (更多上下文/截图)

    wontfix 
    opened by scottzzq 20
  • channel和网络连接之间的关系

    channel和网络连接之间的关系

    从文档来看,使用brpc的http client,如果想达到长连接的效果,应该保存住channel实例并重用它。由此推断,channel和网络连接之间有关联关系。但在文档中又看到,rpc请求发出后,channel实例立马就可以析构了,不用等待结果回来后再析构。由此推断,channel和网络连接又好像没有关系。两个推断有矛盾的地方,求真相。

    opened by gydong 18
  • 使用consul创建channel之后, channel析构会卡住

    使用consul创建channel之后, channel析构会卡住

    Describe the bug (描述bug)

    使用consul创建channel之后, channel析构会卡住。触发析构的线程会一直卡住。

    To Reproduce (复现方法)

    TEST_F(ProxyRpcTest, test_consul_ns) {
      LOGV(LL_NOTICE, "hello consul");
    
      brpc::Channel* channel = new brpc::Channel();
    
      brpc::ChannelOptions options;
      options.protocol = "h2:grpc";
    
      std::string url = "consul://proxy";
    
      int ret = channel->Init(url.c_str(), "rr", &options);
    
      EXPECT_EQ(0, ret);
    
      delete channel;   // 在这里卡住了。
    
      LOGV(LL_NOTICE, "done!");
    }
    

    用gdb查看调用栈显示如下:

    (gdb) bt
    #0  syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
    #1  0x0000000000a2a412 in bthread::futex_wait_private (timeout=0x0, expected=0, addr1=0x7fff82443cf0) at ./src/bthread/sys_futex.h:37
    #2  bthread::wait_pthread (pw=..., [email protected]=0x0) at src/bthread/butex.cpp:138
    #3  0x0000000000a2b8af in bthread::butex_wait_from_pthread (abstime=0x0, expected_value=1, b=0x2a5ce00, g=<optimized out>) at src/bthread/butex.cpp:585
    #4  bthread::butex_wait (arg=0x2a5ce00, [email protected]=1, [email protected]=0x0) at src/bthread/butex.cpp:618
    #5  0x00000000008c3c03 in bthread::TaskGroup::join (tid=<optimized out>, [email protected]=0x0) at src/bthread/task_group.cpp:479
    #6  0x00000000008cf5ba in bthread_join (tid=<optimized out>, [email protected]=0x0) at src/bthread/bthread.cpp:244
    #7  0x0000000000acf510 in brpc::NamingServiceThread::~NamingServiceThread (this=0x2a4cf80, __in_chrg=<optimized out>) at src/brpc/details/naming_service_thread.cpp:244
    #8  0x0000000000acfa01 in brpc::NamingServiceThread::~NamingServiceThread (this=0x2a4cf80, __in_chrg=<optimized out>) at src/brpc/details/naming_service_thread.cpp:265
    #9  0x000000000094e3b6 in brpc::SharedObject::RemoveRefManually (this=<optimized out>) at ./src/brpc/shared_object.h:50
    #10 brpc::intrusive_ptr_release (obj=<optimized out>) at ./src/brpc/shared_object.h:65
    #11 butil::intrusive_ptr<brpc::NamingServiceThread>::~intrusive_ptr (this=0x2a4cb98, __in_chrg=<optimized out>) at ./src/butil/intrusive_ptr.hpp:89
    #12 brpc::LoadBalancerWithNaming::~LoadBalancerWithNaming (this=0x2a4cb20, __in_chrg=<optimized out>) at src/brpc/details/load_balancer_with_naming.cpp:22
    #13 0x000000000094e401 in brpc::LoadBalancerWithNaming::~LoadBalancerWithNaming (this=0x2a4cb20, __in_chrg=<optimized out>) at src/brpc/details/load_balancer_with_naming.cpp:26
    #14 0x00000000009211a6 in brpc::SharedObject::RemoveRefManually (this=<optimized out>) at ./src/brpc/shared_object.h:50
    #15 brpc::intrusive_ptr_release (obj=<optimized out>) at ./src/brpc/shared_object.h:65
    #16 butil::intrusive_ptr<brpc::SharedLoadBalancer>::~intrusive_ptr (this=0x2a25c38, __in_chrg=<optimized out>) at ./src/butil/intrusive_ptr.hpp:89
    #17 brpc::Channel::~Channel (this=0x2a25c00, __in_chrg=<optimized out>) at src/brpc/channel.cpp:136
    #18 0x0000000000921431 in brpc::Channel::~Channel (this=0x2a25c00, __in_chrg=<optimized out>) at src/brpc/channel.cpp:141
    #19 0x00000000006fac54 in std::_Sp_counted_ptr<brpc::Channel*, (__gnu_cxx::_Lock_policy)2>::_M_dispose (this=0x2a4d290) at /usr/include/c++/5/bits/shared_ptr_base.h:374
    #20 0x00000000006f5ea2 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release (this=0x2a4d290) at /usr/include/c++/5/bits/shared_ptr_base.h:150
    #21 0x00000000006f0e3f in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count (this=0x7fff82444128, __in_chrg=<optimized out>) at /usr/include/c++/5/bits/shared_ptr_base.h:659
    #22 0x00000000006f17c6 in std::__shared_ptr<brpc::Channel, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr (this=0x7fff82444120, __in_chrg=<optimized out>) at /usr/include/c++/5/bits/shared_ptr_base.h:925
    #23 0x00000000006f17e2 in std::shared_ptr<brpc::Channel>::~shared_ptr (this=0x7fff82444120, __in_chrg=<optimized out>) at /usr/include/c++/5/bits/shared_ptr.h:93
    #24 0x00000000006f2816 in cim::test::RpcTest::CallRpc<cim::proto::P2PNotifyRequest, cim::proto::P2PNotifyResponse, cim::proto::ProxyService_Stub, void (cim::proto::ProxyService_Stub::*)(google::protobuf::RpcController*, cim::proto::P2PNotifyRequest const*, cim::proto::P2PNotifyResponse*, google::protobuf::Closure*)> (this=0x29f6b60, rpc_type=cim::rpc::RPReq, service_name="proxy", method_name="", req=0x7fff82444860, res=0x7fff82444830, sub=...,
        fp=&virtual table offset 368, uid=1, use_grpc=true) at /docker-v/ubuntu/my-projects/zixia/libs/yy-rpc/test/rpc_sender.h:290
    #25 0x00000000006ecb80 in (anonymous namespace)::ProxyRpcTest_temp_Test::TestBody (this=0x29f6b60) at /docker-v/ubuntu/my-projects/zixia/server/proxy/test/proxy_functional_test.cc:220
    #26 0x000000000089fb33 in testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void> (location=0xc20a96 "the test body", method=<optimized out>, object=<optimized out>) at ./src/gtest.cc:2078
    #27 testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void> ([email protected]=0x29f6b60, method=<optimized out>, [email protected]=0xc20a96 "the test body") at ./src/gtest.cc:2114
    #28 0x000000000089260d in testing::Test::Run ([email protected]=0x29f6b60) at ./src/gtest.cc:2151
    #29 0x00000000008926a4 in testing::TestInfo::Run (this=0x28c8c60) at ./src/gtest.cc:2326
    #30 0x00000000008927a5 in testing::TestCase::Run (this=0x28c8520) at ./src/gtest.cc:2444
    #31 0x0000000000892a1d in testing::internal::UnitTestImpl::RunAllTests (this=0x28c8210) at ./src/gtest.cc:4315
    #32 0x0000000000892cfe in testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> (location=<optimized out>, method=<optimized out>, object=<optimized out>) at ./src/gtest.cc:2078
    #33 testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> (location=0xc21e48 "auxiliary test code (environments or event listeners)",
        method=(bool (testing::internal::UnitTestImpl::*)(testing::internal::UnitTestImpl * const)) 0x892810 <testing::internal::UnitTestImpl::RunAllTests()>, object=0x28c8210) at ./src/gtest.cc:2114
    #34 testing::UnitTest::Run (this=<optimized out>) at ./src/gtest.cc:3929
    #35 0x00000000006dfae0 in RUN_ALL_TESTS () at ./include/gtest/gtest.h:2288
    #36 main (argc=1, argv=0x7fff82444b78) at src/gtest_main.cc:37
    

    Expected behavior (期望行为) channel析构的时候不要被卡住。

    Versions (各种版本) OS: ubuntu 16.04 Compiler: gcc (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609 brpc: protobuf:

    Additional context/screenshots (更多上下文/截图)

    opened by brianjcj 17
  • Set hostname rather than ip when channel Init by hostname but not host in http_requst().uri()

    Set hostname rather than ip when channel Init by hostname but not host in http_requst().uri()

    当前brpc的实现中,如果http请求,uri没有设置全地址,比如"/get_result?a=b",那么会默认用ip+port作为HTTP 报头的header字段。 但是这样有问题,即使我的Channel初始化的时候使用的是域名,比如:http://www.foo.com,最后对对端看到的还是ip+端口。但像Apache/Nginx这种Web Server都是只是单地址多服务的,http://www.foo.comwww.bar.com 可能是同一个ip和端口(对应的是Apache的地址),然后Web Server会通过Host字段来路由到具体的服务。如果Apache看到的是Ip+端口,则不知道该把请求路由到哪个服务。

    当前只能通过发送请求之时给uri填写完整的路径来解决,比如http://www.foo.com/get_result?a=b,但是感觉还是应该框架补全能力比较好。 因为比如我有多个环境,有测试、生产环境。他们访问下游HTTP服务的时候,每个环境的服务请求的接口地址是不同的。 比如生产环境是:http://www.foo.com/get_result?a=b,而测试环境是http://www.foo-test.com/get_result?a=b,我的服务在给Channel初始化的时候已经依据环境来用不同的域名地址进行了初始化。但是当实际给下游发请求的时候(CallMethod之前构造http_request的时候),还需要再判断一遍系统运行环境,再给cntl->http_request().uri() 视环境来赋不同的值。有些冗余,我感觉还是应该框架做好,减少冗余配置和冗余判断。

    当然要实现这一feature,可实现的方案有很多。我这里采用的方案是也是当前感觉改动最小,影响最小但能达到目的的一个。受限于Brpc的历史设计,导致从URL解析出来的域名(或机器名,hostname)没有被存储。 因此我这里重新做了ParseUrl和hostname2ip的操作。虽然Init过程中其实之前就有间接调用到这两个函数,但是确实无法被Channel拿到结果。

    opened by guodongxiaren 16
  • brpc single模式下无法摘掉故障机器

    brpc single模式下无法摘掉故障机器

    Describe the bug (描述bug)

    使用brpc client访问下游服务,如果下游服务某台机器故障(模拟故障可以用iptables命令直接将目标ip数据包过滤掉),这个时候brpc client仍然向故障机器发送请求,根本原因是brpc针对某个socket上出现的超时请求没有做额外的探测工作。如果是临时的出现的几次超时不做额外的检查一般不会有问题,但是极端情况下如果是机房级别的网线断开,这个时候不能及时做故障转移就会造成比较大的问题。

    To Reproduce (复现方法) 模拟故障可以用iptables命令直接将目标ip数据包过滤掉

    Expected behavior (期望行为) 期望能够及时屏蔽下游不可用的机器列表

    Versions (各种版本) OS:linux Compiler:5.2 brpc:master protobuf:2.5

    Additional context/screenshots (更多上下文/截图)

    opened by scottzzq 16
  • Add thrift protocol for brpc.

    Add thrift protocol for brpc.

    Add thrift framed transport with binary message protocol support for brpc. Tested with thrift 0.9.2 on centos6.7 and ubuntu 14.04, it(both client side & server side) works well on didi's production server for servral months.

    opened by kenshinxf 15
  • bvar collect thread issue coredump

    bvar collect thread issue coredump

    Describe the bug (描述bug) #0 0x00007f1b4f7fe387 in raise () from /lib64/libc.so.6 #1 0x00007f1b4f7ffa78 in abort () from /lib64/libc.so.6 #2 0x000000000043e709 in google::DumpStackTraceAndExit () at external/com_github_google_glog/src/utilities.cc:159 #3 0x0000000000726ecd in google::LogMessage::Fail () at external/com_github_google_glog/src/logging.cc:1920 #4 0x0000000000729df6 in google::LogMessage::SendToLog() () at external/com_github_google_glog/src/logging.cc:1877 #5 0x0000000000726bb0 in google::LogMessage::Flush() () at external/com_github_google_glog/src/logging.cc:1737 #6 0x0000000000727499 in google::LogMessageFatal::~LogMessageFatal (this=, __in_chrg=) at external/com_github_google_glog/src/logging.cc:2496 #7 0x000000000058f67a in brpc::BaiduStreamingLogHandler(google::protobuf::LogLevel, char const*, int, std::string const&) () at external/com_github_apache_brpc/src/brpc/global.cpp:299 #8 0x00000000008a26e8 in google::protobuf::internal::LogMessage::Finish() () at external/com_google_protobuf/src/google/protobuf/stubs/common.cc:264 #9 0x00000000008a27a8 in google::protobuf::internal::LogFinisher::operator= ([email protected]=0x7f1910ff85b7, other=...) at external/com_google_protobuf/src/google/protobuf/stubs/common.cc:277 #10 0x00000000008a4eb4 in google::protobuf::(anonymous namespace)::ByteSizeConsistencyError(unsigned long, unsigned long, unsigned long, google::protobuf::MessageLite const&) () at external/com_google_protobuf/src/google/protobuf/message_lite.cc:75 #11 0x00000000008a62a5 in google::protobuf::MessageLite::AppendPartialToString(std::string*) const () at external/com_google_protobuf/src/google/protobuf/message_lite.cc:298 #12 0x00000000008a645c in google::protobuf::MessageLite::AppendToString(std::string*) const () at external/com_google_protobuf/src/google/protobuf/message_lite.cc:282 #13 0x000000000053e6fb in brpc::SpanDB::Index(brpc::Span const*, std::string*) () at external/com_github_apache_brpc/src/brpc/span.cpp:583 #14 0x000000000053efb1 in brpc::Span::dump_and_destroy(unsigned long) () at external/com_github_apache_brpc/src/brpc/span.cpp:657 #15 0x00000000006a7007 in bvar::Collector::dump_thread() () at external/com_github_apache_brpc/src/bvar/collector.cpp:403 #16 0x00000000006a8c29 in bvar::Collector::run_dump_thread (arg=) at external/com_github_apache_brpc/src/bvar/collector.cpp:84 #17 0x00007f1b50e9bea5 in start_thread () from /lib64/libpthread.so.0 #18 0x00007f1b4f8c6b0d in clone () from /lib64/libc.so.6

    Versions (各种版本) OS: CentOS7 Compiler: devtoolset-8 brpc: 0.9.7 protobuf: 3.5.0

    Additional context/screenshots (更多上下文/截图)

    opened by yanglimingcn 14
  • brpc::Join(CallId id) 支持带超时的等待

    brpc::Join(CallId id) 支持带超时的等待

    描述一下使用场景: 一个服务有两个下游SA,SB,服务SA为核心功能,比不可少,SB为非核心功能,可以丢弃,想在SA返回后如果SB 没有返回,增加一个较少的等待时间,或者不等待,直接丢弃,在半同步的模式下,基于 brpc::Join 等待两个服务的返回,所有想brpc::Join可否支持类似于 future.wait_for的接口

    Describe the solution you'd like (描述你期望的解决方法) brpc::Join(CallId id) 增加一个参数支持,最长等待时间, brpc::Join(CallId id, int64_t int64_t waiting_us)

    Describe alternatives you've considered (描述你想到的折衷方案) 看代码调用链路如下 brpc::Join -> bthread_id_join -> bthread::butex_wait, bthread::butex_wait 支持超时可否改成如下 bthread_id_join 增加参数传递超时时间

    index 23046b25..caf99b40 100644
    --- a/src/bthread/id.cpp
    +++ b/src/bthread/id.cpp
    @@ -510,6 +510,10 @@ int bthread_id_cancel(bthread_id_t id) {
     }
    
     int bthread_id_join(bthread_id_t id) {
    +  return bthread_id_join(id, 0);
    +}
    +
    +int bthread_id_join(bthread_id_t id, int64_t us) {
         const bthread::IdResourceId slot = bthread::get_slot(id);
         bthread::Id* const meta = address_resource(slot);
         if (!meta) {
    @@ -526,9 +530,17 @@ int bthread_id_join(bthread_id_t id) {
             if (!has_ver) {
                 break;
             }
    -        if (bthread::butex_wait(join_butex, expected_ver, NULL) < 0 &&
    -            errno != EWOULDBLOCK && errno != EINTR) {
    +        if (us > 0) {
    +          timespec abstime = butil::microseconds_to_timespec(us + butil::gettimeofday_ns());
    +          if (bthread::butex_wait(join_butex, expected_ver, &abstime) < 0 &&
    +              errno != EWOULDBLOCK && errno != EINTR) {
                 return errno;
    +          }
    +        } else {
    +          if (bthread::butex_wait(join_butex, expected_ver, NULL) < 0 &&
    +              errno != EWOULDBLOCK && errno != EINTR) {
    +              return errno;
    +          }
             }
         }
         return 0;
    diff --git a/src/bthread/id.h b/src/bthread/id.h
    index 5364ea55..ecf15880 100644
    --- a/src/bthread/id.h
    +++ b/src/bthread/id.h
    @@ -63,6 +63,10 @@ int bthread_id_create_ranged(
     // Returns 0 on success, error code otherwise.
     int bthread_id_join(bthread_id_t id);
    
    +// Same as bthread_id_join.
    +// waiting_us: the max waiting microseconds
    +int bthread_id_join(bthread_id_t id, int64_t waiting_us);
    +
     // Destroy a created but never-used bthread_id_t.
     // Returns 0 on success, EINVAL otherwise.
     int bthread_id_cancel(bthread_id_t id); 
    

    Additional context/screenshots (更多上下文/截图)

    opened by feng-y 14
  • fix hostname2ip fails when aux_buf is not long enough

    fix hostname2ip fails when aux_buf is not long enough

    使用Channel::Init("http://hostname", options)时,会在hostname2ip中通过gethostbyname_r获取dns的节点信息。如果hostname在dns中配置了很多节点,hostname2ip会因为aux_buf长度不够导致调用失败,从而导致Channel::Init失败。

    解决方法:参考DomainNamingService获取节点信息的方法,当gethostbyname_r返回ERANGE,表示aux_buf长度不足时,将aux_buf长度增大一倍,重新调用gethostbyname_r获取节点信息,直到获取成功为止。

    opened by chenBright 1
  • fix additional refrerence can not release when socket is reviving

    fix additional refrerence can not release when socket is reviving

    fix #1773

    #1774 的pr是使用了加锁的方案,该pr实现了@wwbmmm在 #1774 提到的方案

    _recycle_flag增加reviving状态。如果ReleaseAddtionalReference发现状态是reviving就一直等,直到遇到其它两个状态再继续释放additional refrerence。

    opened by chenBright 1
  • Fail to build in Ubuntu 20.04 + GCC 11.2.0

    Fail to build in Ubuntu 20.04 + GCC 11.2.0

    Describe the bug (描述bug) CMake output the error:

    CMake Error at /usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
      Could NOT find Threads (missing: Threads_FOUND)
    Call Stack (most recent call first):
      /usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
      /usr/share/cmake-3.22/Modules/FindThreads.cmake:238 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
      CMakeLists.txt:148 (find_package)
    
    
    -- Configuring incomplete, errors occurred!
    

    To Reproduce (复现方法) Maybe we should insert something into CMakeLists.txt:30 like this:

    set(CMAKE_THREAD_LIBS_INIT "-lpthread")
    set(CMAKE_HAVE_THREADS_LIBRARY 1)
    set(CMAKE_USE_WIN32_THREADS_INIT 0)
    set(CMAKE_USE_PTHREADS_INIT 1)
    set(THREADS_PREFER_PTHREAD_FLAG ON)
    

    Or we can delete CMakeLists.txt:148:

    find_package(Threads REQUIRED)
    

    Expected behavior (期望行为) I hope it will never fail in this environment when building.

    Versions (各种版本) OS: Ubuntu 20.04 X86_64 Compiler: GCC 11.2.0 brpc: master && rdma && release-1.1 protobuf: 3.12.4

    opened by Sigma711 1
  • fix ssl state exception coredump

    fix ssl state exception coredump

    fix https://github.com/apache/incubator-brpc/issues/658

    coredump case的场景:当上游Controller::IssueRPC选出节点后、Socket::Write KEEPWRITE_IN_BACKGROUND前,下游退出了,上游在OnNewMwssage中读到EOF,将Socket SetFailed,并启动了HealthCheckThread。此时,socket的引用计数为3(Controller::IssueRPC、HealthCheckThread、SocketMap),HealthCheckThread在WaitAndRest等引用计数变成2(预期是HealthCheckThread、SocketMap)。然后,NamingService将该下游节点摘掉,并将对应socket从SocketMap中删除,引用计数减一,变成2。HealthCheckThread在WaitAndRest中将_ssl_state置为SSL_UNKONW。最后,上游Controller::IssueRPC走到Socket::KeepWrite。虽然client未开启ssl,但是HealthCheckThread将_ssl_state置为SSL_UNKONW了,所以程序会运行到写ssl(空指针)的逻辑,最终导致coredump。

    解决方案:设置flag标识是否停止health check thread。当SocketMap删除socket时,先将flag置为true,再释放引用计数。HealthCheckThread中Wait到2之后,判断改flag是否为true。是,则直接返回,退出health check thread。否则,继续进行health check。

    opened by chenBright 3
Releases(1.1.0)
  • 1.1.0(Apr 11, 2022)

    What's Changed

    • Support ipv6 and unix domain socket by @wwbmmm in #1560
    • Support protobuf 3.19.x by @hcoona in #1679
    • Support http protocol dump and replay by @guodongxiaren in #1503
    • Support nshead protocol dump and replay by @wwbmmm in #1486
    • Support parse proto-text format http request body by @hiberabyss in #1690
    • Support deliver timeout from client to server for baidu_std protocol by @wwbmmm in #1472
    • Support inherit span on bthread create by @wwbmmm in #1494
    • Add rpc_replay BUILD file by @taoxu in #1677
    • Add brpc server Start(PortRange, const ServerOptions*) by @serverglen in #1460
    • Add FlatMap insert(const std::pair<key_type, mapped_type>& kv) by @serverglen in #1468
    • Add server eps bvar @serverglen in #1483
    • Fix CheckHealth not set has_request_code bug by @serverglen in #1502
    • Fix a bug that server will send unexpected data frame to client if there are errors occur during processing stream create request by @jenrryyou in #1516
    • Fix LA selection runs too long by @KaneVV1 in #1567
    • Fix HttpResponse error by @jl2005 in #1620
    • Fix bvar status compile error by @zwkno1 in #1625
    • Fix InputMessenger client side retry policy by @ehds in #1680
    • Fix work_stealing_queue_unittest for ARM by @TKONIY in #1709
    • Fix LatencyRecorder qps not accurate by @wwbmmm in #1708
    • Fix compile error after gcc11 with --std=c++20 by @hiberabyss in #1719
    • Fix unstable UT link error by @wwbmmm in #1711
    • Fix Thrift download url to avoid pr build failed by @yangzhg in #1725
    • Remove grpc ParseH2Settings warning log by @yanjianglu in #1599
    • Improve documents by @wwc7654321, @wwbmmm, @tanzhongyi003, @mahongweichina, @cdjingit, @dl239, @ehds
    • Fix typos by @yangzhg, @egolearner, @PengyiPan, @Aaaaaaron, @ehds, @JiaoZiLang, @mapleFU

    Thanks to all contributors for the 1.1.0 version! Full Changelog: https://github.com/apache/incubator-brpc/compare/1.0.0...1.1.0

    Source code(tar.gz)
    Source code(zip)
  • 1.0.0(Dec 11, 2021)

    What's Changed

    • fix grpc ut by @zyearn in https://github.com/apache/incubator-brpc/pull/1036
    • replace_include_with_find_package by @zyearn in https://github.com/apache/incubator-brpc/pull/1032
    • ignore ELIMIT for circuit breaker by @TousakaRin in https://github.com/apache/incubator-brpc/pull/1005
    • limit minimum value of max_concurrency for auto_cl by @TousakaRin in https://github.com/apache/incubator-brpc/pull/1003
    • Add missing '`' by @lingbin in https://github.com/apache/incubator-brpc/pull/1053
    • fix heap overflow in simple_data_pool by @yockie in https://github.com/apache/incubator-brpc/pull/1056
    • fix redis args by @liumh8 in https://github.com/apache/incubator-brpc/pull/1128
    • timer_thread: remove redundant code by @lorinlee in https://github.com/apache/incubator-brpc/pull/1137
    • Update nshead_service.md by @pklim101 in https://github.com/apache/incubator-brpc/pull/1151
    • fix_share_tls_block by @zyearn in https://github.com/apache/incubator-brpc/pull/1156
    • (FIX COMMENT)butil: remove BasicStringPiece in comments by @mapleFU in https://github.com/apache/incubator-brpc/pull/1172
    • fix h2_req check failed when retry after ELIMIT error by @heyuyi0906 in https://github.com/apache/incubator-brpc/pull/1161
    • fix brpc.baidu.com not accessible by @zyearn in https://github.com/apache/incubator-brpc/pull/1189
    • add .asf.yaml to set github about info by @tanzhongyi003 in https://github.com/apache/incubator-brpc/pull/1222
    • update .asf.yaml to change RPC into lowercase by @tanzhongyi003 in https://github.com/apache/incubator-brpc/pull/1224
    • add option to allow access methods from default url by @wasphin in https://github.com/apache/incubator-brpc/pull/1214
    • For https naming service, use 443 as default port by @TousakaRin in https://github.com/apache/incubator-brpc/pull/1139
    • update StreamOptions by @cstarc in https://github.com/apache/incubator-brpc/pull/1247
    • Fix build break for clang 10.0.1 by @thanksunix in https://github.com/apache/incubator-brpc/pull/1261
    • coding style fix in brpc/trackme.cpp by @gydong in https://github.com/apache/incubator-brpc/pull/1270
    • Compatibility improvement of protobuf json format and spring http spec by @chenzhangyi in https://github.com/apache/incubator-brpc/pull/1292
    • Fix bazel build in macos by @chenzhangyi in https://github.com/apache/incubator-brpc/pull/1298
    • make butil::BasicStringPiece support string split functions-family by @lrita in https://github.com/apache/incubator-brpc/pull/1295
    • make butil::ScopedVector support std::initializer_list by @lrita in https://github.com/apache/incubator-brpc/pull/1291
    • Update docs by @serverglen in https://github.com/apache/incubator-brpc/pull/1258
    • Add rpm packaging spec by @wasphin in https://github.com/apache/incubator-brpc/pull/1290
    • Fix the compile error when using GCC compiler with asan enabled on Linux platform. by @warriorpaw in https://github.com/apache/incubator-brpc/pull/1289
    • Fix registering multiple addresses to discovery by @wasphin in https://github.com/apache/incubator-brpc/pull/1320
    • Fix rpm spec by @wasphin in https://github.com/apache/incubator-brpc/pull/1324
    • Remove FlameGraph dependency by @zyearn in https://github.com/apache/incubator-brpc/pull/1345
    • Fix build failure on macOS with FlameGraph by @gogdizzy in https://github.com/apache/incubator-brpc/pull/1411
    • status文档中的代码示例写错了,需要实现的函数名应为Describe by @guodongxiaren in https://github.com/apache/incubator-brpc/pull/1413
    • Update bvar.md by @codroc in https://github.com/apache/incubator-brpc/pull/1414
    • 修改la策略中的异常日志的级别,避免在使用glog的情况下core dump by @guodongxiaren in https://github.com/apache/incubator-brpc/pull/1415
    • Change chinese quotation marks in bvar_c++.md sample code by @tbago in https://github.com/apache/incubator-brpc/pull/1396
    • SampleRequest写错了应为SampledRequest by @guodongxiaren in https://github.com/apache/incubator-brpc/pull/1420
    • 修复rpc_replay中ChannelGroup初始化时resize的bug by @guodongxiaren in https://github.com/apache/incubator-brpc/pull/1422
    • fix warning in gcc8+ by @stdpain in https://github.com/apache/incubator-brpc/pull/1381
    • 文档修复:BRPC_RPC_VALIDATE_GFLAG改为BRPC_VALIDATE_GFLAG by @guodongxiaren in https://github.com/apache/incubator-brpc/pull/1426
    • 消除高版本GCC上编译时大量-Wclass-memaccess的警告 by @guodongxiaren in https://github.com/apache/incubator-brpc/pull/1427
    • rm DISCLAIMER-WIP and use DISCLAIMER for 1.0 release by @tanzhongyi003 in https://github.com/apache/incubator-brpc/pull/1432
    • Update flat_map.h by @yanjianglu in https://github.com/apache/incubator-brpc/pull/1352
    • add flag BTHREAD_NEVER_QUIT by @ustccy in https://github.com/apache/incubator-brpc/pull/1193
    • implement weighted randomized load balancer #1254 by @serverglen in https://github.com/apache/incubator-brpc/pull/1314
    • rpc_view support setting timeout by @serverglen in https://github.com/apache/incubator-brpc/pull/1459
    • Fix baidu_rpc_protocol.cpp a variable incorrectly named by @serverglen in https://github.com/apache/incubator-brpc/pull/1451
    • Fix Socket::WaitAndReset memory leak by @wwbmmm in https://github.com/apache/incubator-brpc/pull/1456
    • docs: fix server_push.md by @lorinlee in https://github.com/apache/incubator-brpc/pull/1463
    • Add gitignore for files generated during test by @wwbmmm in https://github.com/apache/incubator-brpc/pull/1473
    • docs: fix broken link in CONTRIBUTING.md by @lorinlee in https://github.com/apache/incubator-brpc/pull/1481
    • Add FlatMap example code by @serverglen in https://github.com/apache/incubator-brpc/pull/1484
    • Fix apache thrift download failed by @wwbmmm in https://github.com/apache/incubator-brpc/pull/1495
    • Fix http client doc by @wwbmmm in https://github.com/apache/incubator-brpc/pull/1493
    • Add DomainListNamingService which resolves services from the given list periodically by @chenzhangyi in https://github.com/apache/incubator-brpc/pull/1509
    • check is valid character in uri by @guodongxiaren in https://github.com/apache/incubator-brpc/pull/1506
    • emplace/emplace_back replace insert/push_back for pair by @guodongxiaren in https://github.com/apache/incubator-brpc/pull/1504
    • Update gdb_bthread_stack.py by @tanzhongyi003 in https://github.com/apache/incubator-brpc/pull/1521
    • Update get_brpc_revision.sh by @tanzhongyi003 in https://github.com/apache/incubator-brpc/pull/1520
    • Tanslate getting_started.md into Chinese by @guodongxiaren in https://github.com/apache/incubator-brpc/pull/1515
    • Update NOTICE by @tanzhongyi003 in https://github.com/apache/incubator-brpc/pull/1519
    • add missing notice for tools/pprof, test/crc32c_unittest.cc by @tanzhongyi003 in https://github.com/apache/incubator-brpc/pull/1522
    • docs: fix centos compile options by @lorinlee in https://github.com/apache/incubator-brpc/pull/1525
    • Add rtmp/FlvWriterOptions to support writing audio/video content only by @v1siuol in https://github.com/apache/incubator-brpc/pull/1505
    • upgrade baseimage to 20.04 by @tanzhongyi003 in https://github.com/apache/incubator-brpc/pull/1531
    • release 1.0.0-rc02 by @lorinlee in https://github.com/apache/incubator-brpc/pull/1538
    • Fix tools/get_brpc_revision.sh by @v1siuol in https://github.com/apache/incubator-brpc/pull/1536
    • update docs by @serverglen in https://github.com/apache/incubator-brpc/pull/1499
    • Set hostname rather than ip when channel Init by hostname but not host in http_requst().uri() by @guodongxiaren in https://github.com/apache/incubator-brpc/pull/1529
    • add cases.md by @tanzhongyi003 in https://github.com/apache/incubator-brpc/pull/1551
    • Add use case of Baidu by @wwbmmm in https://github.com/apache/incubator-brpc/pull/1557
    • docs(circuit_breaker): add ema wiki link by @JiaoZiLang in https://github.com/apache/incubator-brpc/pull/1575
    • Add Case by @guodongxiaren in https://github.com/apache/incubator-brpc/pull/1576
    • community: add release doc by @lorinlee in https://github.com/apache/incubator-brpc/pull/1582
    • Update release_cn.md by @tanzhongyi003 in https://github.com/apache/incubator-brpc/pull/1588

    Contributors

    Thanks to all contributors for the 1.0.0 version!

    • @zyearn
    • @jamesge
    • @chenzhangyi
    • @TousakaRin
    • @guodongxiaren
    • @old-bear
    • @lorinlee
    • @tanzhongyi003
    • @serverglen
    • @ipconfigme
    • @wasphin
    • @cdjingit
    • @jasonszang
    • @wenweihu86
    • @wwbmmm
    • @gongweibao
    • @lrita
    • @v1siuol
    • @wchengcheng
    • @eric-buaa-cn
    • @vongosling
    • @wanglun
    • @choleraehyq
    • @yanjianglu
    • @niukuo
    • @datonli
    • @lingbin
    • @2012-wangjiaqi
    • @mikeyang2015
    • @gydong
    • @heyuyi0906
    • @liuzhiwei
    • @yinqiwen
    • @cstarc
    • @yockie
    • @loveyacper
    • @ibyte2011
    • @codroc
    • @dzhwinter
    • @gavinchou
    • @llhe
    • @liupengs
    • @AlexiaChen
    • @zyctree
    • @ufosky
    • @aCoder2013
    • @tanguofu
    • @PragmaTwice
    • @Huoke
    • @weimzh
    • @aierui
    • @endyul
    • @yangzhg
    • @photoszzt
    • @byronhe
    • @cg82616424
    • @dyike
    • @fankux
    • @guangqianpeng
    • @gogdizzy
    • @guohao
    • @yichenluan
    • @Agent-Tao
    • @JiaoZiLang
    • @lsjbd
    • @mapleFU
    • @pexeer
    • @qiaohaijun
    • @sduzh
    • @sikanderiqbal
    • @Ye-Tian-Zero
    • @smartczy
    • @stdpain
    • @tbago
    • @PengyiPan
    • @pklim101
    • @warriorpaw
    • @JiYou
    • @zexuan

    Full Changelog: https://github.com/apache/incubator-brpc/compare/0.9.7...1.0.0

    Source code(tar.gz)
    Source code(zip)
  • 1.0.0-rc02(Sep 12, 2021)

  • 0.9.7(Mar 6, 2020)

    • Add DISCLAIMER-WIP as license issues are not all resolved
    • Fix many license related issues
    • Ignore flow control in h2 when sending first request
    • Add flame graph view for profiling builtin service
    • Fix bug that _avg_latency maybe zero in lalb
    • Fix bug that logging namespace conflicts with others
    • Add gdb_bthread_stack.py to read bthread stack
    • Adapt to Arm64
    • Support redis server protocol
    • Enable circuit breaker for backup request
    • Support zone for bilibili discovery naming service when fetching server nodes
    • Add brpc revision in release version
    Source code(tar.gz)
    Source code(zip)
  • 0.9.6(Jul 16, 2019)

    459 commits since release 0.9.5 Notable ones:

    • Health (of a connection) can be checked at rpc-level
    • Fix SSL-related compilation issues on Mac
    • Support SSL-replacement lib MesaLink
    • Support consistent hashing with ketama algo.
    • bvar variables can be exported for prometheus services
    • String[Multi]Splitter supports '\0' as separator
    • Support for bilibili discovery service
    • Improved CircuitBreaker
    • grpc impl. supports timeout
    Source code(tar.gz)
    Source code(zip)
  • 0.9.5(Oct 30, 2018)

    644 commits since 0.9.0! with a lot of improvements and fixes. Major changes:

    • h2c/grpc are supported now, h2(encrypted) is not included.
    • thrift support.
    • Mac build support
    • Extend ConcurrencyLimiter to control max-concurrency dynamically and an "auto" CL is supported by default
    • CircuitBreaker support to isolate abnormal servers more effectively
    Source code(tar.gz)
    Source code(zip)
  • v0.9.0(Mar 20, 2018)

Owner
The Apache Software Foundation
The Apache Software Foundation
C++ framework for json-rpc (json remote procedure call)

I am currently working on a new C++17 implementation -> json-rpc-cxx. Master Develop | libjson-rpc-cpp This framework provides cross platform JSON-RPC

Peter Spiess-Knafl 795 Jun 27, 2022
c++11, high performance, cross platform, easy to use rpc framework.

modern C++(C++11), simple, easy to use rpc framework

qicosmos 1k Jun 29, 2022
Cap'n Proto serialization/RPC system - core tools and C++ library

Cap'n Proto is an insanely fast data interchange format and capability-based RPC system. Think JSON, except binary. Or think Protocol Buffers, except

Cap'n Proto 9k Jun 27, 2022
rpclib is a modern C++ msgpack-RPC server and client library

rpclib rpclib is a RPC library for C++, providing both a client and server implementation. It is built using modern C++14, and as such, requires a rec

null 1.3k Jul 2, 2022
Groupware server backend with RPC/HTTP, MAPI/HTTP, IMAP, POP3 and PHP-MAPI support

Gromox is the central groupware server component of grammm. It is capable of serving as a replacement for Microsoft Exchange and compatibles. Connecti

grammm 119 Jun 27, 2022
a simple RPC wrapper generator to C/C++ functions

This project initiated from the following practical problem. To control experimental equipment via computers, manufactures provide software drivers wi

Pearu Peterson 32 Jan 25, 2022
In-progress multi-PC remote management and administration software

Volition is software to administrate, configure, and monitor vast amounts of PCs simultaneously. The end goal is to create something significantly easier to use and more flexible than Puppet or Ansible, while allowing a single command to perform a similar action on thousands of nodes running vastly different operating systems.

null 5 May 9, 2022
RPC based on C++ Workflow. Supports Baidu bRPC, Tencent tRPC, thrift protocols.

中文版入口 SRPC Introduction SRPC is an RPC system developed by Sogou. Its main features include: Base on Sogou C++ Workflow, with the following features:

C++ Workflow Project and Ecosystem 1.3k Jul 1, 2022
TNLMeans is an implementation of the NL-means denoising algorithm in an Avisynth filter

TNLMeans TNLMeans is an implementation of the NL-means denoising algorithm in an Avisynth filter (by tritical) Requirements This filter requires AviSy

Ferenc Pintér 9 Feb 4, 2022
📘 MIPT University - Olympiad School of Competitive Programming (C++) Curated repository with full explanations, solutions & written lectures collected throughout my academic experience at MIPT school

MIPT - Olympiad School of Competitive Programming (with C++) Outcomes: Studying at this school has allowed be to explore numerous algorithms, data str

Artem Moshnin 1 Nov 24, 2021
The BNG Blaster is a test tool to simulate thousands of PPPoE or IPoE subscribers including IPTV, traffic verification and convergence testing capabilities.

RtBrick BNG Blaster The BNG Blaster is a test tool to simulate thousands of PPPoE or IPoE subscribers including IPTV, traffic verification and converg

RtBrick 89 Jun 3, 2022
Netdata's distributed, real-time monitoring Agent collects thousands of metrics from systems, hardware, containers, and applications with zero configuration.

Netdata is high-fidelity infrastructure monitoring and troubleshooting. It runs permanently on all your physical/virtual servers, containers, cloud deployments, and edge/IoT devices, and is perfectly safe to install on your systems mid-incident without any preparation.

netdata 59.8k Jun 28, 2022
Subscribe anime RSS to download, repack, upload to Baidu, and post on TSDM automatically.

AnimeRSSforTSDM This is a project to automatically transfer Anime to Baidu netdisk with some rules on TSDM. Watch this post in detail. System Flow Cha

InanitySnow 2 May 15, 2022
Microsoft 2.4k Jun 27, 2022
this lib with 26 template container and 10 kinds of algorithm, it is a good lib for study and usage

simple stl this lib simplify the achievement detail of common container, but add the container variety, the whole code partily follow Google Style. Em

wujiazheng 7 Mar 10, 2022
16 channel R/C system for models of all kinds

A 16 channel Radio Controlled system for R/C models of all kinds. This project was started during the 2020 pandemic lockdown (thus the title), and has since grown out of passion & enthusiasm.

Malcolm Messiter 6 Jun 16, 2022
A open source repository of different kinds of algorithms in c. Newbies are encouraged to contribute!

algorithms A open source repository of different kinds of algorithms in c. Newbies are encouraged to contribute! This is my first open source project,

null 20 Jun 13, 2022
ModuLiDAR is an all-in-one open-source software for autonomous UGVs and industrial robots.

ModuLiDAR is an all-in-one open-source software for autonomous UGVs and industrial robots. the target industries that ModuLiDAR is working on are farming industry, mining industry, warehouses industry, and construction industry.

null 18 Jun 22, 2022
This is official repository of the course Industrial Informatics LT, Year 2021/22, at University of Modena and Reggio Emilia, held at Fondazione Universitaria di Mantova

Industrial informatics LT - Mantova - 2021/22 This is official repository of the course Industrial Informatics LT, Year 2020/21, at University of Mode

High-Performance Real-Time Lab 3 Jan 1, 2022
The OpenEXR project provides the specification and reference implementation of the EXR file format, the professional-grade image storage format of the motion picture industry.

OpenEXR OpenEXR provides the specification and reference implementation of the EXR file format, the professional-grade image storage format of the mot

Academy Software Foundation 1.2k Jun 27, 2022
CQC (Charmed Quark Controller) a commercial grade, full featured, software based automation system. CQC is built on our CIDLib C++ development system, which is also available here on GitHub.

The CQC Automation System What It Is CQC is a commercial quality, software based automation system, suitable for residential or commercial application

Dean Roddey 57 Jun 24, 2022
Implement a program that computes the approximate grade level needed to comprehend some text.

Readability - CS50 Implement a program that computes the approximate grade level needed to comprehend some text. Reading Levels According to Scholasti

Vanessa Bauer 1 Oct 4, 2021
Vgpu unlock - Unlock vGPU functionality for consumer grade GPUs.

vgpu_unlock Unlock vGPU functionality for consumer-grade Nvidia GPUs. Important! This tool is not guarenteed to work out of the box in some cases, so

Jonathan Johansson 3.2k Jun 30, 2022
En este repositorio estaré resolviendo los ejercicios del curso "Fundamentos de Programación" de la carrera Ingeniería Industrial de la Universidad Continental.

Resolviendo Ejercicios en C++ En este repositorio estaré resolviendo los ejercicios del curso "Fundamentos de Programación" de la carrera Ingeniería I

Percy Tuncar 3 Apr 29, 2022
Open source Altium Database Library with over 147,000 high quality components and full 3d models.

Open source Altium Database Library with over 147,000 high quality components and full 3d models.

Mark 1.2k Jun 20, 2022
Unity includes a 10,000 NPC scene

luacluster 概要 luacluster分布式游戏服务器框架。特色是实现了万人同屏,实现了无缝大地图,用户开发方式为lua的rpc调用模式,已经接入mongodb。近期计划是写技术白皮书。QQ群:927073440。 [TOC] 1. BUILDING AND INSTALLATION CM

surparallel.org 101 Jun 18, 2022
Packio - An asynchronous msgpack-RPC and JSON-RPC library built on top of Boost.Asio.

Header-only | JSON-RPC | msgpack-RPC | asio | coroutines This library requires C++17 and is designed as an extension to boost.asio. It will let you bu

Quentin Chateau 46 Jun 15, 2022