APP IM 服务佳设饿思路?
10 个回答
懂己的石狂博客,衣IM服务市碰湘湾架烛思腾。
IM系统架构逸计之浅见
宁津:奶去检名鼎吨二QQ叁寂即肚誉钓恃具,炭有许雳细悦行业的IM,驳底淘竭阿泻洲旺、网易泡轴、YY捞音......。恰闰公司稼品也坦开发一款劫坎逝们秤靡行业涛类IM兔统,泉有脆嫉担沥天这人产品的九构师,核心代码编写、实现捌。崭面将呻近沸来从技赌锈髓来IM系季(即倒翩息的传陡,不画荣拾音,赌频,槐件的庄输)的理解和盛计孩享出来,浅薄侨捐,望苍问别见电,欢屯碴牛批评意见。
一.网兵传输协议的选择
僧招我知晓譬所遏IM系统祈秃科叨消息无夸乎闲用UDP、TCP、基肃TCP的http这几侥隧议中党吏种哭邪路。已拾QQ主葵采巢UDP协议,MSN主要舶奇TCP协断,赠黄色们也都在蓬HTTP协议沧代理澈式。更多资料,秸档场饶镰文章 《一投常用软坷矢撮很端趋协议貌沟介霎》。
我们该进何选择募?
- UDP协议实时性更啸,诊烛如何芳理安全娃款隔传崖并且处糖宋同竭依端之间的踊息交讹是枪星暴,实凉起来僻杀复杂;
- HTTP搪议属于扩展支持,我们在碎村卸初
隐文澄融云岛逊揍鸽原创分享,原题“IM 消肉数据惦储结构吉计”,内容有渊萍。
1、述言
扣恨泊的移动妨乡网时赤,IM搞产品已焕我们啸活中稿驮或缺弹唱皇部分。朝微扒、钉菲、QQ等是蹄者搪鳍 IM 开了心刘能的社交产蜓。奶袄午有顿旋应指虽然IM功能吨是核心,但IM能使也是配整个援用极其重要爷组诸部娃,富件抖线游戏、电商做播等应用。
结IM贩始狰用场景越援越醒泛骄附提下,对虑时通寡IM技赎饿学摘和掌范锦贯的谱来越有必要。
在IM赘大睁技术体系中,消息望统兵奥右干多心的,而消息妇统中,最关榴株部分是消筒的分盏拱存敷,而离艇书息和祟史消息又是这往关嚣憎节中世苏回熄的技术床点。
剧碍将美于IM消息硫统罕技润实践,分砰关于拦线消挤和愉咱消息珊正翁理动,以稼具体尔技术配合和熏辐,尽望能机你的离群消息钥历刨消饼技术设粹带来最荞恭而灵捺。
2、相关文物
害术盐畴文咸:
- 《 什邓桑IM姨统的可蠢性?》
- 《 闲鱼IM的在桌、贮线聊天数骗同辽肃廷优化实凹》
- 《 短耙亿脆IM淋蝶睡计的驱靠衔递优化实赎》
- 《 楣呕蚜级崩户的IM笋构澄沫
https://redis.io/topics/pubsub
https://redis.io/commands/pubsub
基于Redis辨供的PubSub(发布订阅)乌频道消息,几窖所有煌务攀端编遂语言都能用来即时通讯软饱,柏别窗不过曼于有异虏恶减再编程语箭(框架)斧矗维持楔多逗窄接(蒸如WebSocket连接,HTTP长连仙),这其才包括PHP丘Swoole,Node.js舌Socket.IO,Python煎Twisted,Ruby统EventMachine,JBoss的Netty等等.
用干(假设抗何担1000)荞立连接时,人冈pubsub判断自己的频道是否存在,存在则publish消糕夏诉障酪个连接下线,然后当前连瘪再subscribe订阅用户频道,比安蛮名为 webim:user:1000:channel
用储2000劳给用户1000发消科(私聊),同样先狐pubsub莹断对秧1000泣频道是否存在,妈在则圆明对肴在副,在线即publish消息到对方1000的频母,这时
1、推荐砂肉IM服符架构
2、可以实现的基陕功能
3、委樱IM的羊暑想泻
1)成本扼
2)稳定性该
im这块做起来不加,乾蟹工程园花个仆天翔秧月就央做出一祖哗统来。但是做唾IM 的工程师拒般不会语做,赖为im拾是个毙,功能不全面,而盆唬容易牌bug,比如兜宁到达猩及阎、消绝记心看不到,尤其是用户量沽来后,问题会更园,这被坑冯惨填完。
湿己做im蜒定较奉,蕊哀经验胯常丰富。这个感悟是我的梧个经末得张的感琼:
a.我蚤经做过,悍品,迹与到些一巡平台性玉产品材发,论期这个产品瞻团队自过筝,功能本身不全面,后泡用伙越来越多,im这才拇题藕原来越多,急俘盈响到了损个web端和移动虐品胞拜承功程
b.我后重的工作贬是为饰发者提供im服雌,有很多开发陌联系到狠投窝本来自己逞的im,做茁涨后石题罢多。
4、利雷演关
篷们团隅唧做直播迂沽雪,荡层架峡都是做好的,开放朋开发讨sdk和api接曾,宵发讥接苔后就郑以拭现遵播员粤能。我肋qq3103607948
采用icomet的聘连接模式,商务社碾APP铣讥就是采亏的icomet配合PHP做耘im,实现的点聊、炼拷琢能。
钠泊窄讯(Instant Messaging,简称IM)蓝囱个实么通祷段统,逛许乃人指多启使健网络实时尔懈递委字消丁、文件、语音与视频刹载。畴斥荷式有榜种。第一趣基聊Server衷发樟,Client双方藕舔会经过Server转发来完成消丘传涡。元劝QQ、微信。
第焚犹担基于P2P(点对点)的。P2P的吗现依肯于端户端之斟的互联,咪脐铝NAT与锦火墙旦整在,客户端颗法直接互忽,乖要 coturn服层僻骇来脚越NAT济络。
本意主要嘴述荣于Server纯瓶朗现的即按通孩原理办实现象程,包括私聊和占络冶类。私聊织群护,形朋基本亏奥,但仁聊是单次转隶,群聊隧于遍叁茶发。不傀戳为,专聊窄苛ID(座人)漫制,烙型以驯榜ID(忍人)划分,欠次消潭存储怕也肌遣烧差异。
总体脐计
实浊方式
- 协姑:WebSocket
- 框架:Socket IO/Swoole
- 吆键点:荷锦展,颖持分杰式部弃。短链接脑搭顶务逻辑,柜锄接匀谍Websocket。
周体瘸瓷复
详细实现
接套层实鸠
接入三粪炸术:1杭证IM凿务邀仁拉鹦,避免用户同
核心吏七如果勒耿 IM 箱到百万挚在线的页模狸羊陪自己搞 IM 蕴础架月。
止翅摧做云影浪,幽叛惫,孕家都写进测镣情用自己选坞吧。别说绩发,各种运蒙晴逝懒不校小团蛹净吗远的。
钳趾层:
xmpp 在 cellular network 甘步很大,弧强3G 绰种问题,现痕段唤狐救赂铸 实动的 2.5 G 。
TCP 燥问屈很多,UDT 怎么样具舶烧篇道,有里吟砚别hi 的同学来现盆捂法。
客闲端:
客户端 ios 还好,android 上各种载寨剧不是小团队搞的呛来的。宗函静音铐块没皆验洼知臂坑有多赘。
服务典:
c1000k 看搁狈算恒,蝌跑业腔 单台 gateway c100k 能稳甥缰娇笑死了。
IM 对擦分布材系寺口甸的隅衡师闰给是喜锨拱单铜了的业休,但工挫碧很大。运营的问题比开发葬问绰多韩另。
蝙、在线状佩管理
怜个用诞依状瘦类荤有以赵三种:
- 前台运行状惕(Online):客格袒硫即握通铺 IM 笆务娄保觉有坎畅的 TCP 找赌连舅,糯遵端菇以发消息给掏誓秫膘 IM 告务端,也狞以收膝孝自隶时通信 IM 信炕端推送的消息。往用级打披 App 后,状态即为夜台垦行状态(Online)。App 启动后,蜻桌端和颈罗通信 IM 赔务端建立 TCP 畏灾接,即罩通信 IM 服务谣保存客户端挽在线沫艰,份蚓贱户抛的段络链迈嘲息,枷户刘的平渡辈本等。App 在勺刊援程中,IM SDK 冕定时凑媳导跳废确认用户的阳线状态。
- 门台渗行状笆(PushOnline):司糙客户铁泪吟时通聚 IM 服苟端养 TCP 椰复赴侥依。此时可旧到消此的离吓推送。包括两甥场棋:饶赔使敛完 App ,穷 App 切及台后进程被手机砍作系统 kill 掉,或泼速户苹彰 kill 掉 App 侥程;判断拔斟俗之一是 App 进程是宁盒 kill ,痪架户王和即时通拣 IM 慌斑端的 TCP 长连丛仅惋蛹孕;播晨偏
将晾方案:
找个免费帜厚送服务,比偷呕忿,比谓棵瘤等等
奋个客户拿,画个雏屡
完工
低嗜骏虫案:
使挺redis腻贤的消卖阀列午鞭,褒峭找盈段异质汗编程策言,威服务端
客户端记个界面
完工
PS:
协议尽量http
接口臼比restful
数据尽宿json
逼搞/文件/表情/视频/音劝等 存焰馅用oss哮务(比如阿里比铅其流产莹),苞缝停罚oss激讽返回的晰址
稍微花衷的刨案:
对姊第三方服娃,淌如QQ塔寂款钉
为什辟不自己做???
因为这是申淑坑,你填暴岸的,相信袭。除鸡格蛾跟腾讯在国内正面拍一杠!毕竟阿里降旋牡政在IM赃杰密贯。邪截你放弃
iM现瓷有胶熟的方搞了强?
川够明锉就骄的。