java伺服器推送訊息技術
其實有很多種方式實現伺服器推送,它們各有各的優缺點:
1.傳統輪詢:此方法是利用 HTML 裡面 meta 標籤的重新整理功能,在一定時間間隔後進行頁面的轉載,以此迴圈往復。它的最大缺點就是頁面刷性給人帶來的體驗很差,而且伺服器的壓力也會比較大。
2.Ajax 輪詢:非同步響應機制,即通過不間斷的客戶端 Ajax 請求,去發現服務端的變化。這種方式由於是客戶端主動連線的,所以會有一定程度的延時,並且伺服器的壓力也不小。
3.長連線:這也是我們之前所介紹的一種方式。由於它是利用客戶端的現有連線實現伺服器主動向客戶端推送資訊,所以延時的情況很少,並且由於服務端的可操控性使得伺服器的壓力也迅速減小。其實這種技術還有其他的實現方式,通過 Iframe,在頁面上嵌入一個隱藏幀(Iframe),將其“src”屬性指向一個長連線的請求,這樣一來,服務端就能夠源源不斷的向客戶端傳送資料。這種方式的不足就在於:它會造成瀏覽器的進度欄一直顯示沒有載入完成,當然我們可以通過 Google 的一個稱為“htmlfile”的 ActiveX 控制元件解決,但是畢竟他需要安裝
ActiveX 控制元件,對於終端使用者也是不合適的。
4.套接字:可以利用 Flash 的 XMLSocket 類或者 Java 的 Applet 來建立 Socket 連線,實現全雙工的伺服器推送,然後通過 Flash 或者 Applet 與 JavaScript 通訊的介面來實現最終的資料推送。但是這種方式需要 Flash 或者 JVM 的支援,同樣不太合適於終端使用者。
5.HTML5 的 WebSocket:這種方式其實與套接字一樣,但是這裡需要單獨強調一下:它是不需要使用者而外安裝任何外掛的。HTML5 提供了一個 WebSocket 的 JavaScript 介面,可以直接與服務端建立 Socket 連線,實現全雙工通訊,這種方式的伺服器推送就是完全意義上的伺服器推送了,沒有半點模擬的成分,只是現階段支援 HTML5 的瀏覽器並不多,而且一般老版本的各種瀏覽器基本都不支援。不過 HTML5 是一套非常好的標準,在將來,當 HTML5 流行起來以後將是我們實現伺服器推送技術的不二選擇。