最近在修改網狐框架時,對底層socket改成websocket適合html5客戶端時遇到一個問題,首先在解決登錄服務器項目時,發現登錄驗證成功后,數據返回到html客戶端會崩潰,每次都蹦,調試代碼時發現,登錄服務器成功驗證后會發送多條信息順序發送給客戶端,然而這些信息中間會夾雜亂碼,一開始無論如何都找不到亂碼原因,從分析自己對網絡發包進行處理的那段代碼開始查,可問題依舊,最后的最后,發現當只啟動登錄服務器的時候,客戶端發送登錄信息,服務器返回多條成功信息,一切都ok了竟然!,然后,當打開中心服務器的時候,發現。。。登錄成功后,客戶端又close了,中間又出現了亂碼,由此推斷,是中心服務器搞的鬼,應該是在中心服那還有未處理的網絡模塊!坑哥啊
最后在發送消息出加上判斷,如果是web消息並且非json格式數據,返回
bool CServerSocketItem::SendData(void * pData, WORD wDataSize, WORD wMainCmdID, WORD wSubCmdID, WORD wRountID)
{
//TODO 底層確定發送方式,websocket直接發送,socket按照原來的封包發送
if (this->m_connectType == ConnectType_websocket){
//數據在上一層調度引擎層完成已經完成完成轉化,可以直接發送
//OutputDebugString("==========CServerSocketItem::SendData==========\n");
OutputDebugString((char *)pData);
OutputDebugString("\n==========CServerSocketItem::SendData==========\n");
char* resulData = new char[wDataSize + 1];
memcpy(resulData, pData, wDataSize);
resulData[wDataSize] = '\0';
std::string stResult = resulData;
Json::Reader readerJson;
Json::Value valueJson;
if (readerJson.parse(stResult, valueJson))
{
//true 驗證通過,可發送
}
else{
return false; //驗證失敗,不發送,返回
}
...
}
}