开源轻量级 IM 框架 MobileIMSDK v3.0 发布!

JackJiang-
 JackJiang-
发布于 2017年06月30日
收藏 116

一、更新内容简介

本次更新为主版本更新,更新内容包含了简化了消息发送目标的方式、支持Web版与APP版互通、优化了Protocal协议结构等主要升级,详细更新内容见“版本更新说明”部分。

重要提示:因 MobileIMSDK v3 修改了核心层,已无法与 MobileIMSDK v2.x 兼容,请使用v2.x版的开发者勿贸然升级,如有疑问请发贴讨论!

二、MobileIMSDK简介

MobileIMSDK是一套专为移动端开发的开源即时通讯高可重用框架:

  • 超轻量级、高度提炼,lib包50KB以内;

  • 完全基于UDP协议实现;

  • 客户端支持iOS、Android、标准Java平台;

  • 可应用于跨设备、跨网络的聊天APP、企业OA、消息推送等各种场景。

MobileIMSDK工程始于2013年10月(2017年06月26日发布了最新版v3.0),起初用作某产品的即时通讯底层实现,完全从零开发。MobileIMSDK现已公开并免费供开发者使用,希望对需要的人有所启发和帮助。

您可能需要:查看更多关于MobileIMSDK的疑问及解答

三、代码托管同步更新

OsChina.net

GitHub.com

四、MobileIMSDK设计目标

让开发者专注于应用逻辑的开发,底层复杂的即时通讯算法交由SDK开发人员,从而解偶即时通讯应用开发的复杂性。

五、MobileIMSDK框架组成

整套MobileIMSDK框架由以下4部分组成:

  1. Android客户端SDK:用于Android版即时通讯客户端,支持Android 2.3及以上,查看API文档

  2. iOS客户端SDK:用于开发iOS版即时通讯客户端,支持iOS 6.0及以上,查看API文档

  3. Java客户端SDK:用于开发跨平台的PC端即时通讯客户端,支持Java 1.5及以上,查看API文档

  4. 服务端SDK:用于开发即时通讯服和端,支持Java 1.5及以上版本,查看API文档

另:MobileIMSDK-Web版为独立工程,如有需要请联系作者。

六、MobileIMSDK v3.0更新内容

【新增重要特性】

  1. 简化了消息发送目标的方式:由原user_id方式改为使用用户名的方式(即取消了每次登陆由服务端生成user_id的方式,从而极大地简化应用层通信的API调用和逻辑代码);

  2. 支持Web版与APP版互通(MobileIMSDK-Web版为另一独立工程,不包含在 MobileIMSDK v3 版之内);

  3. 优化了Protocal协议结构:增加了typeu用户自定义协议类型字段,从而大大简化了用户自义协议类型的使用;

【解决的Bug】

  1. [android]解决了当MobileIMSDK运行于有线电缆网络模式下不能正确判断网络连接事件的问题;

  2. [Android、java][bug]修正了Demo中首次登陆时使用了错误的ip后再改成正确的ip时却不能登陆的问题;

  3. [Android、java、iOS]解决了客户端(Android、iOS、Java)登陆时当服务端返回的认证结果code不为0时,客户端会进入反复登陆的死循环当中;

【其它优化和提升】

  1. [服务端]服务端定时器都由javax.swing.Timer改为java.util.Timer,提高可靠性;

  2. [服务端]重构了服务端代码,简化算法的理解、增强代码可读性;

  3. [服务端]升级了相关lib包:MINA至最新版2.0.13、gson2.7等;

  4. [android]SDK代码依然顽强地支持低至Andriod 2.3.3及以上版本(即Android API Level 10+);

  5. [iOS] 优化了demo的ui界面在ios10和xcode8下的兼容性问题。

  6. [iOS] 优化了“MessageQoSEvent中的messagesLost:(NSArray*)lostMessages”为“messagesLost:(NSMutableArray*)lostMessages”;

  7. [Android、java、iOS]优化了在掉线情况下的消息发送能尽快作为“未实时送达”包反馈到UI层从而提升体验;

  8. [服务端]因升级MINA2.0.13的需要,服务端SDK运行所需的Java版本已提升至1.7及以上版本;

  9. [Java、Android]解决了ClientCoreSDK.release()不能正常停掉LocalUDPDataReciever中的网络监听线程。

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:开源轻量级 IM 框架 MobileIMSDK v3.0 发布!
加载中

精彩评论

北极心lw
北极心lw

引用来自“eechen”的评论

IM开发,我觉得最简单通用的实现还是"AJAX长轮询"和"WebSocket".
浏览器 => AJAX长轮询/WebSocket => PHP-Swoole => 异步订阅 => Redis <= 同步发布 <= PHP-FPM(消息入库) <= 浏览器
AJAX长轮询 用于兼容不支持WebSocket的浏览器.
WebSocket 则可以轻松实现服务器推.

如果要实现客户端点对点的数据传输,如语音通话,视频通话,文件传输,可以考虑使用WebRTC.
WebRTC相关的"房间+信令+穿透"服务器,可以自己搭建.
其中"房间+信令"可以自己用WebSocket编写实现,
而NAT穿透相关的ICE(TURN+STUN)服务器可以用coturn这个C实现的开源项目.
@eechen 你,我无法可说了,到处看到你在这个PHP ,照这么来的话你用PHP做安卓APP ,做IOS APP ,做大型游戏开发,甚至做系统,写显卡驱动,去写神舟火箭的发射程序,去写天宫二号的系统..............你写啊,你写啊,你写啊,逗逼,每个语言都有每个语言的优势和好处,PHP也有他的优点和好处,不要总是一天就你PHP.....到处喷,这没你的好,那没你的好,一天在这BB 在哪BB...............

最新评论(11

红鼠、
红鼠、

引用来自“eechen”的评论

IM开发,我觉得最简单通用的实现还是"AJAX长轮询"和"WebSocket".
浏览器 => AJAX长轮询/WebSocket => PHP-Swoole => 异步订阅 => Redis <= 同步发布 <= PHP-FPM(消息入库) <= 浏览器
AJAX长轮询 用于兼容不支持WebSocket的浏览器.
WebSocket 则可以轻松实现服务器推.

如果要实现客户端点对点的数据传输,如语音通话,视频通话,文件传输,可以考虑使用WebRTC.
WebRTC相关的"房间+信令+穿透"服务器,可以自己搭建.
其中"房间+信令"可以自己用WebSocket编写实现,
而NAT穿透相关的ICE(TURN+STUN)服务器可以用coturn这个C实现的开源项目.

引用来自“doudou233”的评论

@eechen 你,我无法可说了,到处看到你在这个PHP ,照这么来的话你用PHP做安卓APP ,做IOS APP ,做大型游戏开发,甚至做系统,写显卡驱动,去写神舟火箭的发射程序,去写天宫二号的系统..............你写啊,你写啊,你写啊,逗逼,每个语言都有每个语言的优势和好处,PHP也有他的优点和好处,不要总是一天就你PHP.....到处喷,这没你的好,那没你的好,一天在这BB 在哪BB...............

引用来自“eechen”的评论

我只不过说了我熟悉的技术栈实现的思路,而你眼里只看到PHP,也是够了.
你把里面的PHP-Swoole换成Java Netty,把Reids换成ActiveMQ,一样OK.
不要看到PHP就想钓竿,就算你不爽.
微信就是php写的
开源中国首席屌炸天
开源中国首席屌炸天

引用来自“eechen”的评论

IM开发,我觉得最简单通用的实现还是"AJAX长轮询"和"WebSocket".
浏览器 => AJAX长轮询/WebSocket => PHP-Swoole => 异步订阅 => Redis <= 同步发布 <= PHP-FPM(消息入库) <= 浏览器
AJAX长轮询 用于兼容不支持WebSocket的浏览器.
WebSocket 则可以轻松实现服务器推.

如果要实现客户端点对点的数据传输,如语音通话,视频通话,文件传输,可以考虑使用WebRTC.
WebRTC相关的"房间+信令+穿透"服务器,可以自己搭建.
其中"房间+信令"可以自己用WebSocket编写实现,
而NAT穿透相关的ICE(TURN+STUN)服务器可以用coturn这个C实现的开源项目.

引用来自“doudou233”的评论

@eechen 你,我无法可说了,到处看到你在这个PHP ,照这么来的话你用PHP做安卓APP ,做IOS APP ,做大型游戏开发,甚至做系统,写显卡驱动,去写神舟火箭的发射程序,去写天宫二号的系统..............你写啊,你写啊,你写啊,逗逼,每个语言都有每个语言的优势和好处,PHP也有他的优点和好处,不要总是一天就你PHP.....到处喷,这没你的好,那没你的好,一天在这BB 在哪BB...............

引用来自“eechen”的评论

我只不过说了我熟悉的技术栈实现的思路,而你眼里只看到PHP,也是够了.
你把里面的PHP-Swoole换成Java Netty,把Reids换成ActiveMQ,一样OK.
不要看到PHP就想钓竿,就算你不爽.
这个 @eechen 就是个笑话,天天要喊着吊打,结果现在挂在树上惨遭吊打,屁都不敢放一个,又一个神棍被拉下神坛 --via FalconChen . 有链接有真相: https://www.oschina.net/question/253880_2236467
eechen
eechen

引用来自“eechen”的评论

IM开发,我觉得最简单通用的实现还是"AJAX长轮询"和"WebSocket".
浏览器 => AJAX长轮询/WebSocket => PHP-Swoole => 异步订阅 => Redis <= 同步发布 <= PHP-FPM(消息入库) <= 浏览器
AJAX长轮询 用于兼容不支持WebSocket的浏览器.
WebSocket 则可以轻松实现服务器推.

如果要实现客户端点对点的数据传输,如语音通话,视频通话,文件传输,可以考虑使用WebRTC.
WebRTC相关的"房间+信令+穿透"服务器,可以自己搭建.
其中"房间+信令"可以自己用WebSocket编写实现,
而NAT穿透相关的ICE(TURN+STUN)服务器可以用coturn这个C实现的开源项目.

引用来自“doudou233”的评论

@eechen 你,我无法可说了,到处看到你在这个PHP ,照这么来的话你用PHP做安卓APP ,做IOS APP ,做大型游戏开发,甚至做系统,写显卡驱动,去写神舟火箭的发射程序,去写天宫二号的系统..............你写啊,你写啊,你写啊,逗逼,每个语言都有每个语言的优势和好处,PHP也有他的优点和好处,不要总是一天就你PHP.....到处喷,这没你的好,那没你的好,一天在这BB 在哪BB...............
我只不过说了我熟悉的技术栈实现的思路,而你眼里只看到PHP,也是够了.
你把里面的PHP-Swoole换成Java Netty,把Reids换成ActiveMQ,一样OK.
不要看到PHP就想钓竿,就算你不爽.
eechen
eechen

引用来自“eechen”的评论

IM开发,我觉得最简单通用的实现还是"AJAX长轮询"和"WebSocket".
浏览器 => AJAX长轮询/WebSocket => PHP-Swoole => 异步订阅 => Redis <= 同步发布 <= PHP-FPM(消息入库) <= 浏览器
AJAX长轮询 用于兼容不支持WebSocket的浏览器.
WebSocket 则可以轻松实现服务器推.

如果要实现客户端点对点的数据传输,如语音通话,视频通话,文件传输,可以考虑使用WebRTC.
WebRTC相关的"房间+信令+穿透"服务器,可以自己搭建.
其中"房间+信令"可以自己用WebSocket编写实现,
而NAT穿透相关的ICE(TURN+STUN)服务器可以用coturn这个C实现的开源项目.

引用来自“JackJiang-”的评论

真有这么简单,你可以开源个给大家用用呢,光说不练的程序员不是好程序员。。。😃
呵呵,你怎么知道我没有做?还有我做了就要开源给你看么?这是什么逻辑?
说得好像我说了个思路就要做出来无偿给你用似的,你是皇帝老子么?哈哈.
tkggusraqk
tkggusraqk
老大的作品,避暑精品
北极心lw
北极心lw

引用来自“eechen”的评论

IM开发,我觉得最简单通用的实现还是"AJAX长轮询"和"WebSocket".
浏览器 => AJAX长轮询/WebSocket => PHP-Swoole => 异步订阅 => Redis <= 同步发布 <= PHP-FPM(消息入库) <= 浏览器
AJAX长轮询 用于兼容不支持WebSocket的浏览器.
WebSocket 则可以轻松实现服务器推.

如果要实现客户端点对点的数据传输,如语音通话,视频通话,文件传输,可以考虑使用WebRTC.
WebRTC相关的"房间+信令+穿透"服务器,可以自己搭建.
其中"房间+信令"可以自己用WebSocket编写实现,
而NAT穿透相关的ICE(TURN+STUN)服务器可以用coturn这个C实现的开源项目.
@eechen 你,我无法可说了,到处看到你在这个PHP ,照这么来的话你用PHP做安卓APP ,做IOS APP ,做大型游戏开发,甚至做系统,写显卡驱动,去写神舟火箭的发射程序,去写天宫二号的系统..............你写啊,你写啊,你写啊,逗逼,每个语言都有每个语言的优势和好处,PHP也有他的优点和好处,不要总是一天就你PHP.....到处喷,这没你的好,那没你的好,一天在这BB 在哪BB...............
JackJiang-
JackJiang-

引用来自“eechen”的评论

IM开发,我觉得最简单通用的实现还是"AJAX长轮询"和"WebSocket".
浏览器 => AJAX长轮询/WebSocket => PHP-Swoole => 异步订阅 => Redis <= 同步发布 <= PHP-FPM(消息入库) <= 浏览器
AJAX长轮询 用于兼容不支持WebSocket的浏览器.
WebSocket 则可以轻松实现服务器推.

如果要实现客户端点对点的数据传输,如语音通话,视频通话,文件传输,可以考虑使用WebRTC.
WebRTC相关的"房间+信令+穿透"服务器,可以自己搭建.
其中"房间+信令"可以自己用WebSocket编写实现,
而NAT穿透相关的ICE(TURN+STUN)服务器可以用coturn这个C实现的开源项目.

引用来自“开源中国首席屌炸天”的评论

这个 @eechen 就是个笑话,天天要喊着吊打,结果现在挂在树上惨遭吊打,屁都不敢放一个,又一个神棍被拉下神坛 --via FalconChen . 有链接有真相: https://www.oschina.net/question/253880_2236467
不知道你们之间发生了什么天大的冤仇,但这兄弟说的理论上没太大毛病,但要真的开始编码,他可以做做指手划脚的项目经理,编码就把自已给坑进去了,因为他老板要是也像他这样认为就够他爽去了。别喷我,我不是来拉仇恨的哦
JackJiang-
JackJiang-

引用来自“eechen”的评论

IM开发,我觉得最简单通用的实现还是"AJAX长轮询"和"WebSocket".
浏览器 => AJAX长轮询/WebSocket => PHP-Swoole => 异步订阅 => Redis <= 同步发布 <= PHP-FPM(消息入库) <= 浏览器
AJAX长轮询 用于兼容不支持WebSocket的浏览器.
WebSocket 则可以轻松实现服务器推.

如果要实现客户端点对点的数据传输,如语音通话,视频通话,文件传输,可以考虑使用WebRTC.
WebRTC相关的"房间+信令+穿透"服务器,可以自己搭建.
其中"房间+信令"可以自己用WebSocket编写实现,
而NAT穿透相关的ICE(TURN+STUN)服务器可以用coturn这个C实现的开源项目.
真有这么简单,你可以开源个给大家用用呢,光说不练的程序员不是好程序员。。。😃
开源中国首席屌炸天
开源中国首席屌炸天

引用来自“eechen”的评论

IM开发,我觉得最简单通用的实现还是"AJAX长轮询"和"WebSocket".
浏览器 => AJAX长轮询/WebSocket => PHP-Swoole => 异步订阅 => Redis <= 同步发布 <= PHP-FPM(消息入库) <= 浏览器
AJAX长轮询 用于兼容不支持WebSocket的浏览器.
WebSocket 则可以轻松实现服务器推.

如果要实现客户端点对点的数据传输,如语音通话,视频通话,文件传输,可以考虑使用WebRTC.
WebRTC相关的"房间+信令+穿透"服务器,可以自己搭建.
其中"房间+信令"可以自己用WebSocket编写实现,
而NAT穿透相关的ICE(TURN+STUN)服务器可以用coturn这个C实现的开源项目.
这个 @eechen 就是个笑话,天天要喊着吊打,结果现在挂在树上惨遭吊打,屁都不敢放一个,又一个神棍被拉下神坛 --via FalconChen . 有链接有真相: https://www.oschina.net/question/253880_2236467
eechen
eechen
IM开发,我觉得最简单通用的实现还是"AJAX长轮询"和"WebSocket".
浏览器 => AJAX长轮询/WebSocket => PHP-Swoole => 异步订阅 => Redis <= 同步发布 <= PHP-FPM(消息入库) <= 浏览器
AJAX长轮询 用于兼容不支持WebSocket的浏览器.
WebSocket 则可以轻松实现服务器推.

如果要实现客户端点对点的数据传输,如语音通话,视频通话,文件传输,可以考虑使用WebRTC.
WebRTC相关的"房间+信令+穿透"服务器,可以自己搭建.
其中"房间+信令"可以自己用WebSocket编写实现,
而NAT穿透相关的ICE(TURN+STUN)服务器可以用coturn这个C实现的开源项目.
返回顶部
顶部