美文网首页iOS开发iOS学习开发
腾讯Mars在工程中的应用

腾讯Mars在工程中的应用

作者: uniapp | 来源:发表于2017-05-02 20:02 被阅读215次

通常客户端和服务端的关系是:客户端发送请求,服务端响应请求,返回给客户端进行展示.这个过程中,客户端占据主动,服务端处在响应的位置,一去一回中消耗了前端大量的资源,而且会占用较长时间,用户体验就不太好.换一种方式,如果服务端能主动推动数据,客户端来响应数据,服务端承担主动的角色,这样就能解决上述的问题.微信消息,就是采用后一种思路来实现,其流畅通讯带来的舒适体验,相信是每一个聊天的人都能用心感觉.非常感谢腾讯团队,将实现方式Mars项目进行开源.更好的是,我们项目顺利集成Mars,实现所需效果.
初看Mars项目,里面的类多而杂,下面是使用过程中几个关键类关系的介绍:

Mars类关系.png

NetWorkService类负责Mars的创建,并作为Mars回调类stn_callback的代理.由于Mars代理方法过多,为了隔离其代理方法,便于管理,增添了独立的代理类NetWorkEvent.
首先在AppDelegate中,对其进行初始化:

    [NetworkService sharedInstance].delegate = [[NetworkEvent alloc] init];
    [[NetworkService sharedInstance] setCallBack];
    [[NetworkService sharedInstance] createMars];
    [[NetworkService sharedInstance] setClientVersion:200];
    [[NetworkService sharedInstance] setLongLinkAddress:[GXBHttpTools shareManager].marsHostUrl port:----];
    [NetworkService sharedInstance].deviceToken=@"token";
    [[NetworkService sharedInstance] setShortLinkPort:8080];
    [[NetworkService sharedInstance] reportEvent_OnForeground:YES];
    [[NetworkService sharedInstance] makesureLongLinkConnect];
    [[NetworkStatus sharedInstance] Start:[NetworkService sharedInstance]];

其次在需要使用Mars的界面设置代理:

[[NetworkService sharedInstance] addPushObserver:self withCmdId:codes];

最后实现PushNotifyDelegate的代理方法

 -(void)notifyPushMessage:(NSData*)pushData withCmdId:(int)cmdId;

当服务器响应变化时,就会自动向客户端推送,客户端进行变化的响应就行了.

Tips:由于长连接消耗资源,我们项目中采用的是,在当前页面,需要客户端先发送一次请求,然后才和服务端建立长连接.

进过测试,响应速度成倍提升,性能也十分稳定,欢迎使用的小伙伴提出疑问,共同交流.

相关文章

网友评论

  • 青涝的大树:请问需要调整长连接原来的通信协议吗?楼主是重写了longlink_pack?
    uniapp:@vaintwyt 是的,重写了 longlink_pack。

本文标题:腾讯Mars在工程中的应用

本文链接:https://www.haomeiwen.com/subject/evlhtxtx.html