IM 开源介绍
文章目录
引言
国内
TeamTalk(★★★★☆)
OpenIM(★★★★☆)
WildfireChat(★★★★★)
MobileIMSDK
flamingo
GoBelieveIO
国外
Mattermost(★★★☆☆)
RocketChat
Telegram
DeltaChat
服务端
goim
Terry-Ye/im
cim
gim
OIMChat
J-IM
APP
TSWeChat
motianhuo/wechat
gsdios/GSD_WeiXin
更新记录
总结
引言
近些年开源IM百花齐放,特别是国内呈现喷涌趋势。
前有5年前蘑菇街的TeamTalk和网易泡泡发生版权纠纷被Github下架。后有最近很活跃的WildfireChat(野火IM),发展迅猛,短短时间,star就突破了2K。
国外的如基于js的RocketChat,star达到惊人的29K;没有服务端却格外强调安全和隐私的telegram等。还有其他十多个强调服务端或者仅有客户端的开源项目,质量都不错,都具有一定的研究意义。
本文根据作者平时的收藏整理而成,共归纳了17个开源的IM项目:
提供完整解决方案的。包括服务端,pc,mac,ios,android和web等。主要有 TeamTalk 和 WildfireChat 。
国外的,他们的特点是star数量惊人,实现形式和国内的通讯工具不太一样,可以进阶研究学习使用。主要有RocketChat,Telegram 和 DeltaChat 。
未深入研究,有服务端有部分平台客户端,如52im社区作者的MobileIMSDK(java),flamingo(c++)和 GoBelieveIO(go)。
偏服务端,其中以bilibili技术总监开源百万聊天室Terry-Mao/goim(go)为代表,还有如Terry-Ye/im(go),cim(java),gim(go),OIMCha(java)和J-IM(java)等等。
偏客户端,模仿同类APP的界面实现的。如TSWeChat(swift),motianhuo/wechat(java),gsdios/GSD_WeiXin(object-c)。
尽管如此繁多,但是能商用的,也就那么几款。
WildfireChat成熟且BUG少功能完整的,但是收费。
TeamTalk功能也相对完整,但是BUG比较多技术相对比较古老。适合学习和入门,特别是服务端有非常多的细节,比如负载均衡、主备、无状态设计、读写分离以及可水平扩展的架构是如何设计的等等。
下面来看一下具体的开源项目情况。
国内
TeamTalk(★★★★☆)
star:6.2k
github: https://github.com/meili/TeamTalk
服务端: c++
客户端: windows,android,ios,mac,web管理后台
简介:
TeamTalk是一款蘑菇街开源的企业内部即时通讯软件,目前支持pc、安卓、IOS、Mac和web多个终端。
该项目适合学习和入门,客户端BUG很多,服务端比较稳定。
我维护的分支(有详细的服务端编译部署文档):
https://github.com/xmcy0011/TeamTalk
图片:
更多信息可以参考:OSChaina
标签:学习Linux C++服务端开发 | 企业内部沟通工具 | 丰富的终端支持 | 十万级IM服务端架构 | BUG多 | 蘑菇街 | 5年前
OpenIM(★★★★☆)
star: 823
github: https://github.com/OpenIMSDK/Open-IM-Server
服务端:go
客户端:Flutter,Android,IOS,Uniapp,Electron……
简介:
作者来自于微信团队,所以天然的使用了收件箱机制和微服务架构,值得学习研究,商用有待考量,目前还在不断更新中(频率很高)…
图片:
标签:Go开发 | 分布式百万级架构 | 完全开源 | 音视频通话SFU开源 | 微服务 | 正在开发中…
WildfireChat(★★★★★)
star:5.6k
github: https://github.com/wildfirechat/server
服务端: java
客户端: Electron(windows/mac/linux),android,ios,web
简介:
非常活跃的开源IM解决方案,社区版免费,专业版收费(号称支持百万并发和集群部署)。
优点:客户端支持全面,功能成熟完整BUG少。和微信的实现非常接近,底层也是使用的微信跨平台通信库Mars,在弱网(2.5G,E信号)下理论上拥有和微信一样优秀的表现。
缺点:社区版服务端性能不好(嵌入式数据库H2、不支持集群等),只适合学习和试用。
图片:
标签:成熟 | 集群版收费 | 丰富的客户端 | 专业 | 活跃 | 贴近微信 | 界面美观
MobileIMSDK
star:2.6k
语言:java
github: https://github.com/JackJiang2011/MobileIMSDK
简介:
著名http://www.52im.net/站长作品,有丰富的文档和学习资源。并且也包含免费版和收费精编注释版。
只不过要花钱购买源码,可能更适合企业吧。
图片:
更多信息可以参考:即时通讯网
flamingo
star: 2.1k
github: https://github.com/balloonwj/flamingo
简介:
整体操作上类似QQ,服务端使用C++编写,同时提供windows客户端和安卓客户端。
语言: c++
图片:
GoBelieveIO
star: 1.5k
github: https://github.com/GoBelieveIO/im_service
语言:go
简介:
服务端使用Go实现,客户端比较简陋(19年,现在不知道发展成什么样子了)
语言: go
图片: 略
国外
Mattermost(★★★☆☆)
star: 22.5k
github: https://github.com/mattermost/mattermost-server
语言:Go、javaScript、TypeScript
简介
Mattermost 是最近(2022年4月05日)发现的一款开源IM项目,还没有来得及深入研究,因为工作原因,机缘巧合下发现的。它的服务端是Go写的,如果你要在Go方面进阶,学习一些工程实践技巧,可以学习一下。
它的架构支持云部署(aws),并且给出了1万人、5万人、10万人的部署架构。同时,客户端方面主要是当下最流行的跨平台技术,提供了全平台(ios/android、window/mac/linux)的支持。可能和其他国外的IM一样,界面和国内流行的微信不太一样,功能也不太一样。
PS:可以在app store和 google play下载。
图片:
RocketChat
star: 29k
github: https://github.com/RocketChat/Rocket.Chat
语言: JavaScript
简介:
如果是果粉,mac,iphone都可以直接在app store下载,强烈建议使用体验一下,确实和其他所有IM不太一样。
语言: JavaScript
图片:
Telegram
star: 15
github: https://github.com/DrKLO/Telegram
简介:
也可以在app store下载,非常强调安全(加密、全部开源、无后端),如果需要深入研究IM的安全,这个开源项目非常推荐。
国外用的比较多,就是因为没有服务端,数据和隐私有保障。
PS:本人没有编译部署过。
语言: c++,java
图片:
DeltaChat
star: 625
github: https://github.com/deltachat/deltachat-android
简介:
也没有服务端,只要知道对方的邮箱地址,即可聊天。原理是通过邮件对内容加解密实现通信。可惜比telegram晚出,不然也会火的。
PS:本人部署过,但是因为发一条消息就会有一封邮件,体验不太好。有时还会丢消息,实时性也无法保障,但是可以尝鲜,打开思路。
语言: java,rust,swift
图片:
服务端
goim
star:4.7k
github:https://github.com/Terry-Mao/goim
语言:go
简介:
bilibili技术总监作品,百万级并发聊天室服务端,主要用来研究高并发的服务端架构。
架构:
Terry-Ye/im
star:391
github:https://github.com/Terry-Ye/im
语言:go
简介:
上面goim的架构不好理解,通过这个项目可以很好的理解百万级别IM并发的服务端架构设计。
架构:
cim
star:7.1k
github:https://github.com/crossoverJie/cim
语言:java
简介:
比较有意思,命令行交互的IM。官方介绍:cim(cross IM) 适用于开发者的分布式即时通讯系统
架构:
gim
star:1.2k
github:https://github.com/alberliu/gim
语言:go
简介:
有比较多的一些交互流程和一些基础技术名词的说明和解释,比较适合用来学习go如何开发im服务。
交互图:
OIMChat
star: 1.4K
gitee:https://gitee.com/oimchat/oim-fx
语言:java,javafx
简介:
桌面版客户端主要采用JavaFX开发,支持跨平台Windows、Mac、Linux等主流系统使用。服务端也是java,界面上类似QQ。
图片:
J-IM
star: 5.9K
gitee:https://gitee.com/xchao/j-im
语言:java
简介:
服务端使用java开发,号称单机可支持几十万至百万人同时在线。客户端是网页版,功能比较齐全。
1、高性能(单机可支持几十万至百万人同时在线)
2、轻量、可扩展性极强
3、支持集群多机部署
4、支持SSL/TLS加密传输
5、消息格式极其简洁(JSON)
6、一端口支持可插拔多种协议(Socket自定义IM协议、Websocket、Http),各协议可分别独立部署。
7、内置消息持久化(离线、历史、漫游),保证消息可靠性,高性能存储
8、各种丰富的API接口。
9、零成本部署,一键启动。
图片:
APP
TSWeChat
star:3.6k
github:https://github.com/hilen/TSWeChat
语言:swift
简介:
swift版高度还原微信的开源项目,仅包含客户端代码,使用mock展示效果。
图片:
motianhuo/wechat
star:5.1k
github:https://github.com/motianhuo/wechat
语言:java
简介:
也是高仿微信的安卓客户端项目。
图片:
gsdios/GSD_WeiXin
star:3.1k
github:https://github.com/gsdios/GSD_WeiXin
语言: object-c
简介:
同样高仿微信。
图片:
PS:更建议看wildfirechat里面的实现,虽然稍微复杂一些。但是别人有后端,更适合实战和找工作吧。https://github.com/wildfirechat/ios-chat
更新记录
2022-04-10:增加mattermost
2021-09-28:增加Open-IM开源软件和描述。
总结
这么多开源项目,从哪一个开始好呢?
推荐从 TeamTalk(C++) 或者 WildFireChat(Java) 开始。
为什么?有2个很重要的原因:全面和方便调试。
对于要研究后端的同学,你把服务端部署一下,然后安装一个客户端,用一用,看看服务端log,很可能就大概明白一些了。
对于要研究客户端/app的同学,你也可以用别人的服务端来调试。
如果本身是linux c++的同学,强烈推荐研究teamtalk(主要是服务端),主要学什么呢?
学高可用服务端的架构。负载均衡login_server的实现,route_server路由的设计,msg_server网关用户数据模型设计,db_proxy_server的mysql连接池、读写分离、消息存储的分表、redis分库等。
学IM协议和交互流程。
Linux脚本。
数据库表的设计。
如果是go开发或者想学习go,那么推荐Open-IM,学习微服务开发,比如Kafka、Grpc、Redis、Etcd、Docker、Docker-compose等。
参考:
https://www.eoowo.com/?p=1643