成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

網頁端收消息的三種方式

開發
如果是在網頁端登錄,有幾種常見的收取消息的方式呢?一般有三種模式,最容易想到的是拉,但實時性和效率是一對無法調和的矛盾。

場景描述

在網頁端登錄的用戶A,有兩類發送給他的消息:

  • 系統發給A的“系統通知”;
  • 用戶發給A的“聊天消息”;

系統側,一般來說,對每一個接受消息的用戶都有一個“待收消息”的隊列,里面存放了需要給這個用戶的所有消息。

用戶A,如果是在網頁端登錄,有幾種常見的收取消息的方式呢?

常見的方案有3種。

方案一、輪詢拉取

輪詢拉取,這是最容易想到的實現方式:

  • 網頁端起一個timer,每個一段時間(例如10秒),發起一個輪詢請求,拉取隊列里的消息;
  • 如果隊列里有消息,就返回消息;
  • 如果隊列里無消息,就10秒后再次輪詢;

這種方式的優勢是:實現簡單,直觀且,容易理解,互聯網興起時,人數不多的聊天室就是這么玩的。

畫外音:我最早玩的聊天室,是創辦于1996年的互聯網老站碧海銀沙,大家聽過嗎?

缺點也很明顯:

  • 實時性差:最壞的情況下,1條消息進入隊列后,10s之后才會收到;
  • 效率低下:發消息是一個低頻動作,如果10次輪詢才收到1條消息,請求有效性只有10%,浪費了大量服務器資源;

方案二、建立長連接

如果要兼顧實時性和效率,長連接是最佳之選,PC端聊天軟件基本都是使用長連接。

網頁端常見的實現長連接的方式有兩種:

  • WebSocket;
  • FlashSocket;

這兩種方案的細節不再展開。

方案三、HTTP長輪詢

長輪詢,是通過拼裝HTTP短連接來達到長連接的效果,即保證了消息100%實時,又最大化的系統效率。

HTTP長輪詢的核心在于,瀏覽器與服務端之間建立了一條“通知連接”,它的特點是:

  • 這是一條browser發往web-server的HTTP連接;
  • 這條連接只用來收取推送通知;
  • 不像普通的“請求-響應”式HTTP請求,這個HTTP會被服務端夯住,直到有推送通知到達,或者超過約定的時間;

更具體的,對于這條“夯住”與“只收推送通知”的“通知連接”,是怎么玩的呢?

場景1,發起通知連接時,隊列里正好有消息,則:

  • 發起通知連接,正好隊列里有消息;
  • 實時把隊列里的消息帶回;
  • 立馬再發起通知連接; 

場景二,發起通知連接時,隊列里無消息,則:

  • 發起通知連接時,隊列里無消息;
  • 一直等待,直到觸發“時間閾值”,返回無消息;
  • 立馬再發起通知連接; 

場景三,新消息來時,正好有通知連接在,則:

  • 新消息來時,正好有通知連接在;
  • 通知連接實時將消息帶回;
  • 立馬再發起通知連接;

上面三個場景的最終狀態,都是“一定,永遠,會有一條通知連接,連接在瀏覽器與服務器之間”,這樣就能夠保證消息的實時性。

總結

網頁端收消息,一般有三種模式:

(1) 最容易想到的是拉,但實時性和效率是一對無法調和的矛盾;

(2) 最佳的方式是推:

  •  WebSocket和FlashSocket是建立TCP長鏈接 
  •  也可以長輪詢,通過HTTP短連接拼裝長連接,具體是通過“夯住”“只收推送通知”的“通知連接”來實現的,能夠做到消息的實時性到達

知其然,知其所以然。

思路比結論更重要。

責任編輯:趙寧寧 來源: 架構師之路
相關推薦

2012-07-17 09:16:16

SpringSSH

2021-01-05 09:23:49

網頁端消息

2020-11-01 17:10:46

異步事件開發前端

2021-11-05 21:33:28

Redis數據高并發

2019-11-20 18:52:24

物聯網智能照明智能恒溫器

2014-12-31 17:42:47

LBSAndroid地圖

2021-06-24 08:52:19

單點登錄代碼前端

2010-03-12 17:52:35

Python輸入方式

2024-07-08 09:03:31

2013-06-17 17:08:47

Windows PhoWP開發共享數據方式

2011-06-03 11:53:06

Spring接口

2015-01-05 09:56:20

可穿戴設備

2023-10-18 11:12:01

增強現實VR

2009-07-20 15:08:41

Spring實例化Be

2022-08-19 11:19:49

單元測試Python

2022-10-18 10:41:44

Flowable服務任務

2010-08-24 09:43:33

2023-08-22 07:05:34

PowerShellWindows

2018-04-02 14:29:18

Java多線程方式

2017-07-14 15:07:23

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 自拍视频一区二区三区 | 视频在线一区二区 | 亚洲乱码一区二区三区在线观看 | 亚洲毛片在线观看 | 国产精品国产a | 中文字幕中文字幕 | 成人免费网视频 | 一区二区三区视频在线观看 | 久久久久久黄 | 一区二区三区精品 | 亚洲精品一区二三区不卡 | 欧美综合一区二区三区 | 999免费网站| 奇米影视77 | 亚洲精品视频在线观看视频 | 成人福利电影 | 久草视频2 | 久久精品在线 | 一级毛片视频在线观看 | 国产欧美精品一区二区三区 | 99久久精品免费看国产四区 | 国产午夜精品视频 | 91视频88av| 日本视频中文字幕 | 国产精品久久久久aaaa樱花 | 雨宫琴音一区二区在线 | 中文字幕高清 | 亚洲三级av | 国产精品视频一二三区 | 国产一区二区三区免费观看在线 | 黄色国产视频 | a黄毛片| 在线视频一区二区 | 美国av毛片 | 久久精品国产免费看久久精品 | aaa大片免费观看 | 国产精品区二区三区日本 | www.日本三级| 精品国产三级 | 在线视频91 | 亚洲精品国产综合区久久久久久久 |