4、RainbowChat/微觅(MobileIMSDK) iO
4、RainbowChat/微觅(MobileIMSDK) iOS 端
MobileIMSDK 所支持的全部3种即时通讯消息走向分别是:
(1) Client to Client (C2C):即由某客户端主动发起,接收者是另一客户端;
(2) Client to Server (C2S):即由某客户端主动发起,接收者是服务端;
(3) Server to Client (S2C):即由服务端主动发起,接收者是某客户端。
先说说RainbowChat/微觅:
RainbowChat是一套基于MobileIMSDK的移动端IM系统。
说了这么多 可能大家有点乱,我总结一下:
web 端IM框架:MobileIMSDK-web(MobileIMSDK-web基于socket.io)
移动端IM框架:MobileIMSDK(基于UDP协议)
移动端音视频:RainbowAV
无论RainbowChat 还是我二次开发的微觅 都是基与MobileIMSDK
MobileIMSDK 到底是什么呢?
整套MobileIMSDK框架由以下5部分组成:
Android客户端SDK:用于Android版即时通讯客户端,支持Android 2.3及以上,查看API文档;
iOS客户端SDK:用于开发iOS版即时通讯客户端,支持iOS 8.0及以上,查看API文档;
Java客户端SDK:用于开发跨平台的PC端即时通讯客户端,支持Java 1.6及以上,查看API文档;
服务端SDK(Mina版):基于Mina框架,用于开发即时通讯服务端,支持Java 1.7及以上版本,查看API文档。
服务端SDK(Netty版):基于Netty框架,用于开发即时通讯服务端,支持Java 1.7及以上版本,查看API文档 。
纯技术角度讲:它是一整套基于UDP协议的客户端A->服务端->客户端B的3方全向即时通讯算法实现,超轻量级、高度提炼。
应用层角度讲:它是一组包含了Android客户端库、iOS客户端库、Java跨平台客户端库和服务端库的即时通讯SDK框架集。
更通俗一点讲:它是一个专为移动设备设计的跨设备、跨平台、跨网络的即时通讯开发框架,可用于(包含但不限于)开发聊天APP、企业OA、消息推送应用等。
有过即时通讯应用开发经验的人都有体会,即时通讯应用开发的难点不仅在于应用层的业务逻辑实现,更重的要是需要稳定、可靠、对应用层友好的即时通讯核心层框架,否则应用层的复杂逻辑再掺杂进即时通讯通信技术本身的复杂性(在无线网络普及的时代,问题更为突出),会让经验不足的开发团队陷入混乱。MobileIMSDK的价值在于:让开发者专注于应用逻辑的开发,底层复杂的即时通讯算法交由SDK开发人员,从而解偶即时通讯应用开发的复杂性。
解决了哪些问题?
UDP协议实现,更符合现今的复杂移动端网络通信环境;
完善的QoS消息送达保证机制,解决了UDP通信时的消息黑洞问题;
解决了高延迟网络环境下的2G、3G、4G、WiFi以及传统宽带的多端、多网混合通信可靠性和稳定性问题;
拥有通信自动治愈算法,无论无线信号多么恶劣,只要恢复通信,将自动实现连接自我修复;
预定义多种耗电模式,在应对不同通信场景的情况下,自主决定电量、网络流量的消耗等;
易拆装的协议封装,可针对不同应用场景,选择适合的协议压缩方案;
历经多个版本的锤炼,API高度封装,在解决应用层与即时通讯层代码偶合的同时,能适应更多应用场景。
有关MobileIMSDK的更多介绍,请见《即时通讯框架MobileIMSDK:快速入门》。
技术:
【1】基于UDP实现, 更好地适应移动端弱网络;
【2】即时通讯核心层基于MobileIMSDK 工程;
【3】支持完整的消息送达保证(QoS)机制,使用UDP协议依然能保证送达率,理论丢包率约为0.0001%;
【4】底层UDP协议的无连接特性保证在高延迟、跨洲际、不同网络制式的恶恶劣环境中能稳定、可靠地运行;
【5】基于 MobileIMSDK 工程的自有协议,未来的流量压缩对于APP端的节电控制和流量控制、服务端的网络吞吐等都有完全的控制能力;
【6】完善的网络状况自动检测、断网重连等服务自动治愈能力;
【7】核心算法和实现均为自主原创,保证了技术的持续改进、升级、扩展;
功能简介
1、支持文本消息、语音留言消息、图片消息;
2、支持一对一陌生人聊天模式;
3、支持一对一正式好友聊天模式;
4、支持多对多世界频道群聊模式;
5、全功能实时语音聊天(完全自主开发,现在就可体验);
6、全功能实时音视频聊天(完全自主开发,现在就可体验);
7、完整的礼物发送和积分管理子系统;
8、支持个人相册、个人语音介绍;
9、支持好友聊天模式、陌生人聊天模式;
10、完整的历史消息离线存取机制;
11、内置一完整“商城”模块,目前仅用于演示产品的完整性;
12、[v4.3新增] 全功能群聊系列功能(仅限专业版);
13、[v4.3新增] 支持好友聊天、群聊天中的大文件消息,支持离线文件、断点续传等 (仅限专业版);
14、[v4.4新增] 短视频消息功能(仅限专业版);
15、其它未提及的功能和特性请自行下载体验。
界面效果:
专业版:
iOS端接入MobileIMSDK
第1步:基本配置:
// 设置AppKey
[ConfigEntity registerWithAppKey:@"5418023dfd98c579b6001741"];
// 设置服务器ip和服务器端口
[ConfigEntity setServerIp:@"im.zhangfan.online"];
[ConfigEntity setServerPort:7901];
第2步:回调设置
//框架基本事件回调实现类:
#import "ChatBaseEventImpl.h"
#import "AppDelegate.h"
#import "MainViewController.h"
@implementationChatBaseEventImpl
// 登陆/掉线重连结果通知
- (void) onLoginMessage:(int) dwUserId withErrorCode:(int)dwErrorCode
{
if(dwErrorCode == 0)
NSLog(@"登录成功,当前分配的user_id=%d!", dwUserId);
else
NSLog(@"登录失败,错误代码:%d", dwErrorCode);
}
// 掉线事件通知
- (void) onLinkCloseMessage:(int)dwErrorCode
{
NSLog(@"网络连断开了,error:%d", dwErrorCode);
}
@end
//实时消息事件回调实现类:
#import "ChatTransDataEventImpl.h"
#import "Toast+UIView.h"
#import "AppDelegate.h"
#import "MainViewController.h"
@implementationChatTransDataEventImpl
- (void) onTransBuffer:(NSString*)fingerPrintOfProtocal withUserId:(int)dwUserid andContent:(NSString*)dataContent
{
NSLog(@"收到来自用户%d的消息:%@", dwUserid, dataContent);
}
- (void) onErrorResponse:(int)errorCode withErrorMsg:(NSString*)errorMsg
{
NSLog(@"收到服务端错误消息,errorCode=%d, errorMsg=%@", errorCode, errorMsg);
}
@end
//QoS相关事件回调实现类:
#import "MessageQoSEventImpl.h"
#import "AppDelegate.h"
#import "MainViewController.h"
@implementationMessageQoSEventImpl
- (void) messagesLost:(NSArray*)lostMessages
{
NSLog(@"收到系统的未实时送达事件通知,当前共有%li个包QoS保证机制结束,判定为【无法实时送达】!"
, (unsigned long)[lostMessages count]);
}
- (void) messagesBeReceived:(NSString*)theFingerPrint
{
if(theFingerPrint != nil)
{
NSLog(@"收到对方已收到消息事件的通知,fp=%@", theFingerPrint);
}
}
@end
* 设置事件回调通知监听:
// 设置事件回调
[ClientCoreSDK sharedInstance].chatBaseEvent = [[ChatBaseEventImpl alloc] init];
[ClientCoreSDK sharedInstance].chatTransDataEvent = [[ChatTransDataEventImpl alloc] init];
[ClientCoreSDK sharedInstance].messageQoSEvent = [[MessageQoSEventImpl alloc] init];
第3步:登陆请求
intcode = [[LocalUDPDataSender sharedInstance] sendLogin:用户名 withPassword:密码];
if(code == COMMON_CODE_OK)
NSLog(@"提示"withContent:@"登陆请求已发出。。。");
else
NSLog([NSStringstringWithFormat:@"登陆请求发送失败,错误码:%d", code]);
第4步: 发送消息
int code = [[LocalUDPDataSender sharedInstance] sendCommonDataWithStr:@"这是一条测试信息..."toUserId:对方的userId qos:YESfp:nil];
if(code == COMMON_CODE_OK)
NSLog(@"提示"withContent:@"您的消息已成功发出。。。");
else
NSLog([NSStringstringWithFormat:@"您的消息发送失败,错误码:%d", code]);
从 Github 得到的核心库工程和Demo演示工程
是不是很有成就感了?那么我们来说说MobileIMSDK吧
本文引用与即时通讯网
纯技术角度讲:它是一整套基于UDP协议的客户端A、服务端、客户端B的3方全向即时通讯算法实现,超轻量级、高度提炼。
应用层角度讲:它是一组包含了Android客户端库、iOS客户端库、Java跨平台客户端库和服务端库的即时通讯SDK框架集。
更通俗一点讲:它是一个专为移动设备设计的跨设备、跨平台、跨网络的即时通讯开发框架,可用于(包含但不限于)开发聊天APP、企业OA、消息推送应用等。
纯技术角度讲:它是一整套基于UDP协议的客户端A、服务端、客户端B的3方全向即时通讯算法实现,超轻量级、高度提炼。
应用层角度讲:它是一组包含了Android客户端库、iOS客户端库、Java跨平台客户端库和服务端库的即时通讯SDK框架集。
更通俗一点讲:它是一个专为移动设备设计的跨设备、跨平台、跨网络的即时通讯开发框架,可用于(包含但不限于)开发聊天APP、企业OA、消息推送应用等。
整套MobileIMSDK框架由以下5部分组成:
Android客户端SDK:用于Android版即时通讯客户端,支持Android 2.3及以上,查看API文档;
iOS客户端SDK:用于开发iOS版即时通讯客户端,支持iOS 8.0及以上,查看API文档;
Java客户端SDK:用于开发跨平台的PC端即时通讯客户端,支持Java 1.6及以上,查看API文档;
服务端SDK(Mina版):基于Mina框架,用于开发即时通讯服务端,支持Java 1.7及以上版本,查看API文档。
服务端SDK(Netty版):基于Netty框架,用于开发即时通讯服务端,支持Java 1.7及以上版本,查看API文档
。