第一代的Web技術,是基于HTML的靜態頁面,用于發布靜態的內容。程序員們就想出來通過程序來生成HTML的技術,將內容保存于數據庫中,然后通過SQl和模板引擎等技術去生成HTML頁面。
第二代的Web,開始大量使用前端程序,使用Ajax等方式動態主動觸發事件,從服務端拉取數據,并且增加了前端的程序邏輯。從而實現了Web頁面上的交互。
不過,隨著技術的發展,前兩種架構已經遠遠不能滿足信息交互需求了。通過采用Server PUSH的架構,服務器端可以主動向Web推送數據,從而達到實時交互,這一定會是未來的主流。比如A,B,C3人同時在一個頁面上瀏覽,A對B進行了評論,并且提到了C。傳統的架構,B,C將無法感知到,只有B,C再次拉取內容時,才會得到此信息。顯然B ,C錯過了與A交互的最佳時機,而且得知信息的時間延后了很多。
傳統的PULL模式,也可以通過定時輪詢的方式來嘗試拉取數據。但這種技術1是并不是實時的,信息還是需要到了一定時間間隔才可以得到。2,這種方式可能大部分請求是無效的,白白浪費了一次網絡請求。還造成了web Server的負載大大增高。
真正的PUSH技術目前有3種,WebSocket,目前還不夠成熟,而且IE瀏覽器或其他低版本瀏覽器不支持。Flash Socket,雖然可以實現,但需要依賴Flash第三方組件,而且可能會被防火墻或者其他安全策略攔截,實際效果不理想。XHR輪詢,這種方式目前是最成熟的解決方案,瀏覽器端開啟KeepAlive,Server使用epoll等異步IO方式,效率非常高,實測效果非常好。目前Facebook、人人網都使用此模式。
目前大部分PUSU架構,都是用Erlang、Node.js等語言去實現。但Web2.0時代,基本上大部分網站都用PHP來實現的。改用其他編程語言實現,與現有架構就會不兼容。PHP也有libevent的Server實現方式,不過存在各種問題,并不好用。
Swoole通過C寫了內置Server,并作為PHP擴展,提供了非常好的可編程性。Server本身的實現也非常高效,采用了多線程Epoll,全異步驅動,讀寫分離的方式。可以很好的利用到多核。