Mars iOS開發中需要注意事項

前一段時間公司項目IM底層改成用Mars來開發,Mars客戶端是基於C++來開發的,在剛開始使用的過程中也遇到了一些問題,現在總結如下:

  • 對於客戶端發起的心跳,服務器必須要有響應回包,否則長連接很快就會斷掉.
  • 對於客戶端通過Mars發出去的請求,如果服務器端響應回包時必須要有seq(也可以叫其它名字),並且該字段的值要與客戶端發過去的值相同.
  • 客戶端發出去的包不一定需要服務器端的迴應,可能通過Tasksend_only屬性進行設置,eg:
Task ctask;
ctask.cmdid = task.cmdid;
ctask.channel_select = task.channel_select;
ctask.cgi = std::string(task.cgi.UTF8String);
    ctask.shortlink_host_list.push_back(std::string(task.host.UTF8String));
ctask.user_context = (__bridge void*)task;
ctask.send_only = task.sendOnly;
  • 當請求服務器長時間不回的話,Mars會認爲這個連接有問題,會斷開重連,並走它的自動重連邏輯.
  • 可以在stn_callback.mm類中監聽Mars連接狀態的變化:
void StnCallBack::ReportConnectStatus(int _status, int longlink_status) {
    [[LCNetworkService sharedInstance] OnConnectionStatusChange:_status longConnStatus:longlink_status];

    switch (longlink_status) {
        case mars::stn::kServerFailed:
        case mars::stn::kServerDown:
        case mars::stn::kGateWayFailed:
            break;
        case mars::stn::kConnecting:
            break;
        case mars::stn::kConnected:
            break;
        case mars::stn::kNetworkUnkown:
            return;
        default:
            return;
    }  
}
  • 對於一些帳號和設備信息最好也設置一些,如果不設置的話,Mars重連時間間隔會變大:
std::string AppCallBack::GetAppFilePath(){
    NSString *appPath = @"your app file path";
    return std::string([appPath UTF8String]);
}
AccountInfo AppCallBack::GetAccountInfo() {
    AccountInfo info;

    info.username = "user name";
    info.uin = 1233333;//設置一個用戶ID即可
    return info;
}
DeviceInfo AppCallBack::GetDeviceInfo() {
    DeviceInfo info;

    info.devicename = "your device name";
    info.devicetype = 1;
    return info;
}
unsigned int AppCallBack::GetClientVersion() {
    return 1;//返回你的app版本號
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章