1. 程式人生 > >訊息推送的幾種實現方式

訊息推送的幾種實現方式

B/S架構的系統多使用HTTP協議,所以首先來看看HTTP協議:

HTTP協議的特點:

  • 列表內容
  • 無狀態性;
  • 通過Internet傳送請求訊息和響應訊息;
  • 使用埠接收和傳送訊息,預設為80埠;但是底層還是使用Socket完成。

HTTP協議決定了伺服器與客戶端之間的連線方式,無法直接實現訊息推送。
所以就有一些變相的解決方法: 雙向通訊和訊息推送

1.輪詢:

客戶端定時向伺服器傳送Ajax請求,伺服器接到請求後馬上返回響應資訊,並關閉連線。

優點:後端程式編寫比較容易
缺點:請求中大半是無用的,浪費頻寬和伺服器資源
例項:適用於小型應用

2.長輪詢:

客戶端向伺服器傳送Ajax請求,伺服器接到請求後Hold住連線,直到有新訊息才返回響應資訊,並關閉連線;客戶端處理完響應資訊後再向伺服器傳送新的請求。

優點:在無訊息的情況下不會頻繁的請求,耗費的資源少
缺點:伺服器Hold住連線會消耗資源,返回資料順序無法保證,難於管理和維護
例項:WebQQ、Hi網頁版、FaceBook IM等

3.長連線:

在頁面中嵌入一個隱藏的jframe,將這個隱藏的iframe的src屬性設定為對一個長連線的請求或者採用XRH請求,伺服器端就能源源不斷地往客戶端輸入資料。

優點:訊息即時到達,不發無用的請求;管理起來也相對方便
缺點:伺服器維護一個長連線會增加開銷
例項:Gmail聊天

4.Flash Socket:

在頁面中嵌入一個使用了Socket類的Flash程式,JavaScript通過呼叫此Flash程式提供的Socket介面與伺服器端的Socket介面進行通訊,JavaScript在收到伺服器端傳送的資訊後控制頁面的顯示。

優點:實現真正的即時通訊,而不是偽即時
缺點:客戶端必須安裝Flash外掛;非HTTP協議,無法自動穿越防火牆
例項:網路互動遊戲

5.WebSocket:

WebSocket是HTML5開始提供的一種瀏覽器與伺服器間進行全雙工通訊的網路技術;依靠這種技術可以實現客戶端和伺服器端的長連線,雙向實時通訊。

優點:事件驅動;非同步;使用WS或者WSS協議的客戶端Socket;能夠實現真正意義上的推送功能
缺點:少部分瀏覽器不支援,不同瀏覽器支援的程度和方式都不同

相關推薦

Android訊息的Androidpn實現方式:(一)下載androidpn伺服器端與客戶端的Demo並執行

androidpn是基於XMPP協議的用於向Android客戶端推送文字資訊的一套開源的工具。它幫我們做了那些維護Socket長連線等等的事情。  在真正把它使用在我們的專案中之前,我們先領略一下推送。 第二步,啟動伺服器端與客戶端,通過Web頁面推送。詳細的步驟如下:

訊息實現方式

B/S架構的系統多使用HTTP協議,所以首先來看看HTTP協議: HTTP協議的特點: 列表內容 無狀態性; 通過Internet傳送請求訊息和響應訊息; 使用埠接收和傳送訊息,預設為80埠;但是底層還是使用Socket完成。

單例模式的實現方式

str 類加載 代碼 創建對象 stat 懶漢 導致 方法 不支持 1、懶漢式,線程不安全 是否 Lazy 初始化:是 是否多線程安全:否 實現難度:易 描述:這種方式是最基本的實現方式,這種實現最大的問題就是不支持多線程。因為沒有加鎖 synchronized,所以嚴格意

分布式session的實現方式

服務器 單點 redis 容易 穩定性 常用 str 廣播 cati 1.基於數據庫的session共享 2.基於NFS共享文件系統 3.基於memcached 的session,怎麽保證session的高可用 4.基於resin/tomcat web容器本身的sessio

單例模式實現方式

size ron jdk null singleton bsp 還要 一個 fin 1、餓漢式:靜態常量 特點:單例的實例被聲明成static和final變量了,在第一次加載類到內存中時就會初始化,所以會創建實例本身是線程安全的 public class Sin

Java單例模式實現方式

開始 名稱 常量 就是 多線程開發 靜態代碼塊 浪費 ack 多線程同步 在平時的工作、學員的學習以及面試過程中,單例模式作為一種常用的設計模式,會經常被面試官問到,甚至筆試會要求學員現場默寫,下面將會就單例模式的實現思路和幾種常見的實現方式進行簡單的分享。

分布式鎖的實現方式

article nod process 過程 快速 details 一段時間 detail 領域 一、為什麽要使用分布式鎖 為了保證一個方法或屬性在高並發情況下的同一時間只能被同一個線程執行,在傳統單體應用單機部署的情況下,可以使用Java並發處理相關的API(如Reent

帶輸入查詢功能匹配下拉框的實現方式

sae idt hwnd 就會 bfd bmgr 使用方法 oaf adt 在Web開發中我們經常需要用戶進行輸入操作,輸入框內我們輸入幾個字,輸入框就會出現下拉提示你可能要輸入的完整信息。下面我總結了幾種常見的方案: 一:EasyUi combobox 組合框 具體使用方

Java 定時任務的實現方式

java作業調度 tails 監聽器 ever 觸發 posit exist ttr 輕量級 JAVA實現定時任務的幾種方式 @(JAVA)[spring|quartz|定時器]   近期項目開發中需要動態的添加定時任務,比如在某個活動結束時,自動生成獲獎名單,導出exce

【小家java】Session和Cookie的區別和聯絡、分散式session的實現方式

相關閱讀 【小家java】java5新特性(簡述十大新特性) 重要一躍 【小家java】java6新特性(簡述十大新特性) 雞肋升級 【小家java】java7新特性(簡述八大新特性) 不溫不火 【小家java】java8新特性(簡述十大新特性) 飽受讚譽 【小家java】java9

最近在研究多線程,淺談JAVA中多線程的實現方式

進行 數據 使用 導致 效率問題 多線程 方法 sta img 多線程的實現方式:   個人認為,要說多線程的實現方式,萬變不離其宗,最基本的就是兩種1.繼承Thread類;2.實現runnable接口,本質上來說就是用來啟動線程執行任務的過程,具體來說的話,通過這

垂直水平居中的實現方式

一.使用彈性盒模型 display: flex      1. 在你不知道當前元素的寬高的情況下 你可以為父元素設定 display: flex;樣式 並設定 align-items: center; justify-content: center  

字串反轉的實現方式?陣列反轉

1. strrev(); 只對英文友好 2. function getRev($str,$encoding='utf-8'){ $result = ''; $len = mb_strlen($str); for($i=$len-1; $i>=0; $

Python的實現方式

Python自身作為一門程式語言,它有多種實現。這裡的實現指的是符合Python語言規範的Python解釋程式以及標準庫等。這些實現雖然實現的是同一種語言,但是彼此之間,特別是與CPython之間還是有些差別的。 下面分別列出幾個主要的實現。 1.CPython:這是Python

VUE 全域性變數的實現方式

1、全域性變數專用模組 意思是說,用一個模組(js or vue)管理這套全域性變數,模組裡的變數用export (最好匯出的格式為物件,方便在其他地方呼叫)暴露出去,當其它地方需要使用時,用import 匯入該模組 全域性變數專用模組Global.vue const colorLi

佇列的實現方式

佇列簡介: 佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。 佇列是一種最常用的資料結構,也是最重要的一種資

分散式鎖的實現方式

目前幾乎很多大型網站及應用都是分散式部署的,分散式場景中的資料一致性問題一直是一個比較重要的話題。分散式的CAP理論告訴我們“任何一個分散式系統都無法同時滿足一致性(Consistency)、可用性(Availability)和分割槽容錯性(Partition toleran

Android開發-在Android應用裡整合友盟訊息SDK的實現(相容小米、華為、魅族機型離線

前 言 最近由於專案的功能需求的需要,需要在Android應用整合訊息推送的功能,而目前市面上的第三方訊息推送除了友盟推送外,還有極光推送、小米推送、個推以及信鴿(騰訊)推送等。當時本人對比各大第三方的訊息推送進行了測試,覺得友盟訊息推送整合簡單,推送訊息的

URL重寫的實現方式的總結

                URL重寫,其實就是把帶一大堆引數的url,變成一個看上去很規矩的url,主要目的是為了搜尋引擎。舉例/viewthread.jsp?id=1234/viewthread.jsp?id=1235/viewthread.jsp?id=1236重寫後,可以用/viewthread/

分散式鎖的實現方式~

目前幾乎很多大型網站及應用都是分散式部署的,分散式場景中的資料一致性問題一直是一個比較重要的話題。分散式的CAP理論告訴我們“任何一個分散式系統都無法同時滿足一致性(Consistency)、可用性(Availability)和分割槽容錯性(Partition toleran