自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

feed留,單聊群聊,系統(tǒng)通知,狀態(tài)同步,到底是推還是拉?

開(kāi)發(fā) 開(kāi)發(fā)工具 前端
看到產(chǎn)品功能,思考后面的技術(shù)實(shí)現(xiàn),其實(shí)是很有意思的一件事。今天拋一個(gè)話(huà)題,根據(jù)業(yè)務(wù)現(xiàn)象,一起討論其后端實(shí)現(xiàn)是推還是拉?

今天拋一個(gè)話(huà)題,根據(jù)業(yè)務(wù)現(xiàn)象,一起討論其后端實(shí)現(xiàn)是推還是拉?

[[228278]]

一、feed流

可以理解為一個(gè)發(fā)布訂閱業(yè)務(wù),典型業(yè)務(wù)是微博(朋友圈)。你關(guān)注了姚晨的微博,姚晨發(fā)布了消息,你的主頁(yè)能看到她***發(fā)布的消息,這個(gè)場(chǎng)景是推送,還是拉取呢?

畫(huà)外音:微博是弱關(guān)系,關(guān)注無(wú)需對(duì)方同意,粉絲可以無(wú)上限;朋友圈是強(qiáng)關(guān)系,好友需要對(duì)方同意,好友個(gè)數(shù)有上線(xiàn)。

如果推送,姚晨發(fā)布消息的時(shí)候,要把消息ID投遞到所有粉絲的主頁(yè)消息隊(duì)列里,推送量巨大。

如果拉取,一來(lái)主頁(yè)消息無(wú)法實(shí)時(shí)更新,二來(lái)每次刷新動(dòng)作非常復(fù)雜:

  • 拉取你關(guān)注人的list
  • 拉取這些人的消息list
  • 對(duì)于這些人的這些消息進(jìn)行rank處理,例如按照時(shí)間排序
  • 還無(wú)法對(duì)主頁(yè)進(jìn)行緩存,因?yàn)橹灰嘘P(guān)注人發(fā)布消息,主頁(yè)內(nèi)容就會(huì)變化
  • 還得考慮“不看誰(shuí)的消息”,以及“消息不給誰(shuí)看”
  • ...

是不是覺(jué)得有點(diǎn)煩?如果你是架構(gòu)師,你會(huì)怎么做?

二、聊天消息

聊天消息又分為單聊和群聊,典型的業(yè)務(wù)是微信。和朋友小窗溝通是單聊,群內(nèi)扯淡是群聊。

  • 單聊,很容易想到是服務(wù)器推送,但瀏覽器里的聊天工具JS只能使用http式的request - response協(xié)議,又能不能保證消息的實(shí)時(shí)性呢?
  • 群聊,一個(gè)群500個(gè)人,有人在線(xiàn),有人離線(xiàn),到底是推送,還是拉取呢?

如果是推送,1條消息將轉(zhuǎn)變?yōu)?00條消息,系統(tǒng)壓力會(huì)異常之大。

如果是拉取,消息的實(shí)時(shí)性又該如何保障呢?

還有一個(gè)坑爹的需求,“釘釘”的群聊天消息“已讀回執(zhí)”,這個(gè)需求簡(jiǎn)單描述是:對(duì)于每一條你發(fā)出的每一群消息,你能夠看到,多少人已讀,多少人未讀。這個(gè)群消息已讀回執(zhí),猜猜看,又是怎么實(shí)現(xiàn)的呢?

三、系統(tǒng)通知

系統(tǒng)消息聽(tīng)上去比較泛,典型的業(yè)務(wù)是QQ的登錄廣告彈窗,以及登錄后的右下角廣告提示。

  • QQ每天***登錄后的新聞彈窗:拉取?第二次登錄卻又沒(méi)有。
  • QQ運(yùn)行過(guò)程中的QQ彈窗廣告:推送?一次推送幾千萬(wàn)條,會(huì)不會(huì)系統(tǒng)抖動(dòng)?

或許,真實(shí)的實(shí)現(xiàn)方式或許與我們想的并不一樣。

玩桌面QQ時(shí),收到過(guò)“你的好友XXOO登錄了”的彈窗提示么?這是一個(gè)好友登錄/登出狀態(tài)的客戶(hù)端同步。同理,群有500人,每個(gè)群友的在線(xiàn)/不在線(xiàn)狀態(tài)又是怎么實(shí)現(xiàn)同步的呢?

推送?那一個(gè)用戶(hù)登錄退出都要推送N個(gè)好友?M個(gè)群友?

拉取?如何保證好友狀態(tài),群友狀態(tài)的實(shí)時(shí)性?

畫(huà)外音:好友/群友狀態(tài)一致性是非常復(fù)雜的,移動(dòng)的時(shí)代,索性引入“一律在線(xiàn)”的概念,微信的好友就不存在所謂“頭像亮”和“頭像灰”的概念了,客戶(hù)端狀態(tài)同步這一塊復(fù)雜性有所降低。

看到產(chǎn)品功能,思考后面的技術(shù)實(shí)現(xiàn),其實(shí)是很有意思的一件事。

究竟是推,還是拉?大伙怎么看。

還有其他業(yè)務(wù)場(chǎng)景的疑惑,也歡迎評(píng)論提問(wèn),有價(jià)值的問(wèn)題,5月份逐條解答。

畫(huà)外音:自從有了群消息已讀回執(zhí),我再也不能裝作不在線(xiàn),領(lǐng)導(dǎo)的消息沒(méi)看到了。

【本文為51CTO專(zhuān)欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來(lái)源: 51CTO專(zhuān)欄
相關(guān)推薦

2016-11-01 15:16:52

QQ狀態(tài)即時(shí)通訊

2015-04-21 09:20:40

SwfitObject—C

2018-10-09 15:26:19

JavaPython語(yǔ)言

2024-03-28 13:13:00

Htmx前端開(kāi)發(fā)框架

2011-09-05 10:30:51

重構(gòu)代碼庫(kù)業(yè)務(wù)模型

2017-08-09 08:43:02

公有云趨勢(shì)聲勢(shì)

2018-09-26 14:17:00

編程語(yǔ)言JavaPython

2024-12-17 08:30:01

2020-12-22 21:24:45

在線(xiàn)狀態(tài)服務(wù)端狀態(tài)狀態(tài)同步

2014-11-17 10:03:23

OpenStack

2014-06-05 14:46:05

設(shè)計(jì)設(shè)計(jì)師

2021-12-09 20:16:26

無(wú)線(xiàn)核心網(wǎng)傳輸

2020-08-31 19:19:27

TCPUDP視屏面試

2022-08-18 23:13:25

零信任安全勒索軟件

2023-10-10 16:03:48

數(shù)字化信息化

2013-11-18 10:34:00

企業(yè)移動(dòng)化移動(dòng)信息化

2020-08-31 19:17:24

Python強(qiáng)類(lèi)型語(yǔ)言弱類(lèi)型語(yǔ)言

2024-06-17 00:00:02

前端技術(shù)JavaScript

2019-01-31 10:15:14

群聊單聊消息

2022-11-09 10:32:50

群業(yè)務(wù)群聊數(shù)據(jù)結(jié)構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)