EasyDarwin云平台之EasyCMS中心管理服务消息处理优化

来源:互联网 发布:淘宝店怎么推广最有效 编辑:程序博客网 时间:2024/05/16 16:22

问题

之前EasyCMS的消息处理一直是EasyCMS的性能瓶颈。原因是当客户端通过RESTful接口访问EasyCMS时,EasyCMS构建报文转发给设备时与出现等待问题。这就造成了EasyCMS在等待设备响应时出现了资源浪费的情况。如图所示

CMS

CSHTTPSession在访问RESTful接口后再自己做循环超时等待SCHTTPSession返回回应信息。

//HTTPSession.cpp ExecNetMsgCSGetStreamReqRESTfulfInfo.uTimeoutNum++;if (fInfo.uTimeoutNum > CliStartStreamTimeout / 100)//超时了{    fInfo.bWaitingState = false;//恢复状态    return httpRequestTimeout;}else//没有超时,继续等待{    fInfo.uWaitingTime = 100;//以100ms为周期循环等待,这样不占用CPU    return QTSS_NoErr;}

更改方法

仿照sip协议中的From/To/Via将发送方、转发方、接收方的ID携带在报文中,当响应报文发送回来之后可以有效的索引报文的发送方和接收方,这样可以更好的将发送/接收的报文使用对应的HTTPSession进行处理。避免了循环等待的低效操作。

//HTTPSession.cpp ExecNetMsgDSPushStreamAckstring strFrom = req.GetBodyValue(EASY_TAG_FROM);string strTo = req.GetBodyValue(EASY_TAG_TO);string strVia = req.GetBodyValue(EASY_TAG_VIA);OSRefTableEx* sessionMap = QTSServerInterface::GetServer()->GetHTTPSessionMap();OSRefTableEx::OSRefEx* sessionRef = sessionMap->Resolve(strTo);if (sessionRef == NULL)    return EASY_ERROR_SESSION_NOT_FOUND;OSRefReleaserEx releaser(sessionMap, strTo);HTTPSession* httpSession = static_cast<HTTPSession *>(sessionRef->GetObjectPtr());if (httpSession->IsLiveSession()){    //do something}

获取更多信息

邮件:support@easydarwin.org

WEB:www.EasyDarwin.org

QQ交流群:288214068

Copyright © EasyDarwin.org 2012-2016

EasyDarwin

0 0
原创粉丝点击