libgsc继续改进(c++).

来源:互联网 发布:上海银行淘宝金卡 编辑:程序博客网 时间:2024/05/16 17:28

继续尝试future模式:


1. libgsc作客户端时的编码方式:

future函数提供了两个lambda表达式,  一个是响应到来时回调,  另一个是超时到来时回调.  这两个回调都在actor所处的线程中

被调用.  请求消息在future中自动发送.

GsAuthWithGasReq* req = new GsAuthWithGasReq();h2nActor->future(0x0001, req, [this](ushort ret, Message* r){        if(ret != RET_SUCCESS) /** 失败. */       return;        GsAuthWithGasRsp* rsp = (GsAuthWithGasRsp*)r;        LOG_INFO("auth with GAS successfully: %s\n", rsp->ShortDebugString().c_str())},/** timeout 回调. */[this, req]{        LOG_WARN("timeout, req: %s\n", req->ShortDebugString().c_str())        this->close();});

2.  如果两个玩家相互修改对方的exp(经验值), 代码可能是这样:

future函数可以在任何线程中调用, 但lambda表达式只会在调用future的actor中被调用.

Player* a;Player* b;a->future([a]{ a.exp += 1000; });b->future([b]{ b.exp += 1000; });


3. 重新测试了一下.  比java的性能好太多.  

200个连接, 4个线程, 140万条消息/s时, cpu约为150%,  内存占用7M.

20000个连接, 4个线程, 17000条消息/s时, cpu约为53%. 内存占用92M.



0 0
原创粉丝点击