Mars iOS开发中需要注意事项

1 篇文章 0 订阅

前一段时间公司项目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版本号
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值