文章目录引言国内teamtalk(openim ) WildfireChat ) MobileIMSDKflamingoGoBelieveIO国外RocketChatTelegramDeltaChat服务器端goimterry-ye/imcimmimimimingetery
引言
近年来,开源IM百花齐放,尤其是国内呈喷出趋势。
5年前,蘑菇街的team Talk和NETFlix发生了著作权纠纷,被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 ) c、gobelieveio (go )等。
在靠近服务端,以bilibili技术总监开源百万聊天室terry-zxDMF/goim(go )为代表,有terry-ye/im ) go、CIM ) Java、gim )
靠近客户端,模仿同类APP的界面实现。 例如tswechat(swift )、motian huo/we chat (Java )、GSDIOS/GSD_Weixin ) object-c )。
有这么多,但能商业化的,也只有这样了。
WildfireChat成熟,bug少,功能完整,但需要收费。
TeamTalk功能也比较完整,但是错误多的技术比较旧。 适合学习和入门。 特别是在服务器端,有很多细节,包括负载均衡、主备、无状态设计、读写隔离、水平可扩展的体系结构是如何设计的。
让我们来看看具体的开源项目的情况。
国内team talk (star:http://www.Sina.com /
github :https://github.com/Meili/team talk
服务器端: c
客户端: windows、android、ios、mac、web管理后台
个人资料:
TeamTalk是蘑菇街开源企业内部即时通讯软件,目前支持pc、Android、IOS、Mac和web多台终端。
该项目适合学习和入门,客户端bug多,服务器端稳定。
我维护的分支(有详细的服务端编译部署文档) :
3359 github.com/xmcy 0011/team talk
图:
有关详细信息,请参见OSChaina
标签: http://www.Sina.com/| http://www.Sina.com/| http://www.Sina.com/| http://www.Sina
Openim(star:823
github :https://github.com/openimsdk/open-im-server
服务器端: go
客户端: Flutter、安卓、IOS、Uniapp、Electron……
个人资料:
作者来自微信团队,自然使用收件箱机制和微服务框架,值得学习研究,商业化值得考虑,目前正在不断更新中…
图:
标签: http://www.Sina.com/| http://www.Sina.com/| http://www.Sina.com/| http://www.Sina
wild firechat (star:http://www.Sina.com /
github :https://github.com/wild firechat/server
服务器端: java
客户端:电子版(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
图片: 略
国外 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-zxdmf/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
更新记录 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等。
作者:着急的蜡烛・许,喜欢运动和开源的90后野路子程序员一枚。
微信:xuyc1992
博客:www.geek265.com
公众号:跟我学IM后台开发