HTML5服務器端推送事件 解決PHP微信牆推送問題

問題描述html

之前的文章中《 PHP微信牆製做,開源 》已經用PHP搭建了一個微信牆獲取信息的服務器,而後我就在想推送技術應該怎麼解決,上一篇已經用了.NET 的signalr作了一個微信牆,PHP一直沒什麼好思路,原本想用websocket,但本身寫socket要解析websocket協議,PHP有一個比較好的實現是workerman,github地址請戳這裏,可是都不是很中意,昨天給本身作官網的時候,看了一下MDN,瀏覽發現了這個東西「使用服務器發送事件」,忽然就有了思路,今天能夠試一下這個。git

HTML5 服務器推送事件 簡介github

服務器推送事件(Server-sent Events)是 HTML 5 規範中的一個組成部分,能夠用來從服務端實時推送數據到瀏覽器端。相對於與之相似的 COMET 和 WebSocket 技術來講,服務器推送事件的使用更簡單,對服務器端的改動也比較小。對於某些類型的應用來講(好比咱們如今作的這個微信牆),服務器推送事件是最佳的選擇。 web

在介紹 HTML 5 服務器推送事件以前,首先介紹一些上面提到的幾種服務器端數據推送技術。第一種是 WebSocket。WebSocket 規範是 HTML 5 中的一個重要組成部分,已經被不少主流瀏覽器所支持,也有很多基於 WebSocket 開發的應用。正如名稱所表示的同樣,WebSocket 使用的是套接字鏈接,基於 TCP 協議。使用 WebSocket 以後,實際上在服務器端和瀏覽器之間創建一個套接字鏈接,能夠進行雙向的數據傳輸。WebSocket 的功能是很強大的,使用起來也靈活,能夠適用於不一樣的場景。不過 WebSocket 技術也比較複雜,包括服務器端和瀏覽器端的實現都不一樣於通常的 Web 應用。 瀏覽器

除了 WebSocket 以外,其餘的實現方式是基於 HTTP 協議來達到實時推送的效果。第一種作法是簡易輪詢,即瀏覽器端定時向服務器端發出請求,來查詢是否有數據更新.另外一種是 COMET 技術,他改進了簡易輪詢的缺點,使用的是長輪詢。不過 COMET 技術的實如今服務器端和瀏覽器端都須要第三方庫的支持。 服務器

綜合比較上面提到的 4 種不一樣的技術,簡易輪詢因爲其自己的缺陷,並不推薦使用。COMET 技術並非 HTML 5 標準的一部分,從兼容標準的角度出發,也不推薦使用。WebSocket 規範和服務器推送技術都是 HTML 5 標準的組成部分,在主流瀏覽器上都提供了原生的支持,是推薦使用的。不過 WebSocket 規範更加複雜一些,適用於須要進行復雜雙向數據通信的場景。對於簡單的服務器數據推送的場景,使用服務器推送事件就足夠了。 微信

服務器推送事件的例子請看這裏傳送門,咱們下面就直接使用這個技術製做微信牆了websocket

相關文章
相關標籤/搜索