日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP ServerPush (推送) 技术的探讨

發布時間:2025/3/20 php 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP ServerPush (推送) 技术的探讨 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:http://blog.163.com/bailin_li/blog/static/17449017920124811524364/

需求:

我想做個會員站內通知的功能。不想用以前的ajax查詢,聽說有個推技術。以下文章介紹的不錯,來自轉載,

==================================================================================

PHP中Push(推送)技術的探討? [http://vistaswx.com/blog/article/php-server-push]

?

隨著人們對Web即時應用需求的不斷上升,Server Push(推送)技術在聊天、消息提醒尤其是社交網絡等方面開始興起,成為實時應用的數據流核心。這篇日志試圖探討的便是各種適合于PHP的Push的實現方式以及其優劣。

1. 什么是Server Push

想象在聊天應用中,如果使用傳統的ajax來承擔消息的傳入,那么一般是通過每隔一定時間拉取一次信息的方式實現,但是其實這種方式有大量查詢是浪費的。聊天等Web應用更需要服務器在特定時間來主動告知前端有新的消息(Push),而不是前端每時每刻問服務器:“來消息了嗎?”(Pull)。這也正是為什么這個技術常被叫做反向ajax。

其他別名:Comet,反向Ajax

?

2. 如何實現Push

其實所謂的推送技術也沒有多么復雜,目前從大類上有3種,一種仍然建立在ajax基礎上,還有一種建立在框架基礎上,最后一種拋棄了傳統的HTTP協議,使用Flash或者HTML5的WebSockets技術。接下來將對這三種類別產生的不同的方式進行探討。

1) Ajax 長輪詢

Ajax長輪詢從本質上來說仍然是一種pull,但是實時性較高,無用請求減少很多,是一種不錯的Push實現方案。不過它只減少了網絡上的無謂消耗。

核心:?客戶端發起一個ajax請求,服務端將請求擱置(pending)或者說掛起,直到到了超時時間(timeout)或需要推送時返回;客戶端則等待ajax返回后處理數據,再發起下一個ajax請求。

優點:?兼容性較高,實現簡單

缺點:?對于php這種語言來說,如果要做到實時,那么服務端就要承受大得多的壓力,因為擱置到什么時候往往是不確定的,這就要php腳本每次擱置都進行一個while循環。
當然,如果服務器刷新每秒級,那尚可接受,只是實時性上退化了。

注意:?瀏覽器有連接數限制。我得出的結論是如果當前頁面上有一個ajax請求處于等待返回狀態,那么其他ajax請求都會被擱置(Chrome, Firefox已測)。如果頁面有一般ajax需求怎么辦?解決方法是開個框架,框架中使在另一個域名下進行Comet長輪詢,需要注意跨域問題。

PHP實現:?Jquery+php實現comet

相關:Ajax跨域和js跨域解決方案

?

2) Frame 長連接

受到ajax啟發,出現了框架下的長連接。

核心:?Frame中發起一個普通請求,服務器將其擱置;需要推送時輸出直接執行
腳本,然后繼續保持連接。如果擔心超時問題可以改成框架論詢。

優點:?與1一樣具有高兼容特性

缺點:?最大的問題是如果框架在載入,那么瀏覽器就好一直顯示“載入中”,這就弱爆了(解決方法參見文末的相關閱讀資源)。同樣服務器也要能hold住大量循環……另外,是否有同域連接限制沒測試。

?

?

3) Flash/HTML5 WebSockets

用flash來發起WebSockets,秒殺前面一切問題。

優點:?標準化, RealTime, Push

缺點:?服務器需要能應對WebSockets;還有如果既沒有Flash又不支持HTML5的怎么辦?

PHP實現:?Start Using HTML5 WebSockets Today

?

6) 使用兼容封裝層(socket.io)

以上每種方法都有優劣,那么終極解決方案便是合在一起!能WebSockets時候就WebSockets,不支持HTML5特性就退化到Flash,沒有Flash則退化到Ajax長輪詢。這也是我的Rainbowfish所采用的方式。

優點:?高度封裝,編寫非常容易,幾乎不需要關心如何去實現的。實時,超低負載,高并發。

缺點:?其實算不上缺點,socket.io的服務器端要求是node.js,而不是php。

個人看法:?如果你是獨立主機,能運行程序,那么socket.io配合node.js是個非常高效的選擇。為什么呢?因為它還可以避免php的服務端高負載。

Rainbowfish的消息系統通過這種方式實現: 所有客戶端都通過socket.io掛在nodejs服務器上(注意: 只是掛著,不需要任何循環,因為它是事件驅動的);需要推送消息了,服務器就與nodejs通信(比如訪問某個地址來實現),告訴它推送什么消息到哪里;nodejs收到推送信號后,則通過socket.io實時傳輸數據給瀏覽器。這個其實也是一條單向的路,因為nodejs服務器不具備與php通信的能力,實際上也不需要,網頁上直接連php就可以了。

?

3. 結束語

事實上,第一個方法(Ajax Long Pull)是一個不錯的方法,只是如果使用php完成的話服務器負載上有點大,但這其實是通病;而最后列舉的socket.io方案完全避免了這個問題,因為它屬于另一種架構,并且這種組合也可以配合幾乎所有的腳本語言實現push。

對于實時性要求非常高的應用,或許使用php實現實時部分并不是一個好的選擇,將會面臨非常大的服務器負載(可以通過編寫支持等待事件的擴展來解決這個問題);如果只是消息提示等,則可以調整服務器上刷新的間隔降低到秒的級別,負載尚可接受。不過無論哪種用途,配合那些非阻塞語言或許才是最好的選擇。

4. 相關閱讀

How to implement COMET with PHP

Start Using HTML5 WebSockets Today

Comet(Wikipedia)

Ajax跨域和js跨域解決方案

Jquery+php實現comet

==============================================================================================

?

comet研究[http://lync.in/research-on-comet/]

?

在Web應用中,客戶端的AJAX技術已經非常普遍也非常深入人心了,但與此同時,另一些應用,諸如在線監控,實時數據顯示,即時通訊等需要將后臺數據變化情況實時顯示到前臺,這樣的由服務器push的行為(也許會讓你想到blackberry)則需要另一種方案來解決,也就是本文所要介紹的Comet —— 無需安裝插件,保持http長連接的服務器推方案。
以下兩點是方案中必須顧及到的。

  • 瀏覽器通用性,對各種不同實現結構模型的支持。

  • 長連接對于服務器資源的占用,以及服務器的承受能力

  • Comet的客戶端與服務端交互流

    業界對于Comet實現有兩種主要的解決方案:

  • 基于AJAX的輪詢(long polling)方式

    這種方式就是由客戶端發出AJAX請求,然后服務端阻塞請求直至有響應或超時。客戶端在接收到服務端的指令之后會進行響應并發出新的請求。

    從實現層面上來說,當XMLHttpRequest的狀態為4也就是load的狀態時會進行客戶端處理,而Gecko(Firefox)和Webkit(Chrome,Safari)目前支持在readystate為3的時候讀取(當然只能讀取到所有該請求已返回的串內容,所以需要自行確定指令邊界),Trident(IE)目前如果中途去讀取會拋出錯誤,IE8中使用XDomainRequest可以適當解決這個問題(參見Eric Law的COMET Streaming in Internet Explorer[])。

    目前,開心網采用的是這一種方式。

  • ?

  • 基于iframe及htmlfile的流(streaming)方式

    這種方式是使用了iframe的機制,然后使得這個iframe請求一個特定的URL,并通過對這個頁面的加載不斷的從服務端抓回數據,這里從服務端抓回的數據大多是對頁面當前JavaScript函數的引用和操作。

    這個方案的一個明顯不足之處是頁面會一直顯示正在加載,而這在IE上會更明顯。Google的天才們想到了用htmlfile的ActiveX控件來解決這個問題的方案,詳細描述可以參見Alex Russell的What else is burried down in the depth's of Google's amazing JavaScript?

    目前,人人網和GTalk采用的是這種方式。

  • 除了文首所提到的通用性和性能之外,還有幾點是需要列入考量范圍的。

  • 數據交換的格式。由于數據交換的形式是推送,所以不可避免的會有指令隊列的存在,于是數據結構是需要前后臺詳細約定的,執行指令和數據指令都需要有嚴格的界定,一般來說,JSON的方案比較普遍。

  • 瀏覽器本身的連接數限制。HTTP 1.1規范中聲明客戶端不應該與服務器端建立超過兩個的 HTTP 連接,而IE又嚴格遵守了這一點,所以前臺在處理請求的時候需要謹慎控制請求的數量。

  • 其實,Comet技術在AJAX大紅大紫的2005年之后的2006年時是業界一個很熱的討論點,目前的這兩種方式非常成熟,在dojo,dwr等前端框架中都已經有這樣的實現,而Bayeux協議的出現也已經在實質上訂下了一種業界的標準。

    Comet的框架前端有Pushlet,dwr和dojo等,服務端有Jetty,Meteor,Orbited,Glassfish,Alpha,實現的產品語言也覆蓋了Java,C++,Python,Perl,Ruby,Erlang,.Net等。

    下一代HTML5中的WebSocket會是Comet的一個新起點,但在那之前,在非插件的web層面應該不會有更進一步的討論與技術出現。

    本文只是對Comet這個技術進行大體的概述,粗陋不明之處難免,在后續的文章中將會對WebSocket進行一定的解釋和演示。

    參考資料:

    • 這里有一個php的comet的例子How to implement COMET with PHP。這個要看看

    • 這是developerWorks上對于Comet的介紹。

    • 這是當前Comet的服務器端的一些產品及介紹。

    • 當然,Wikipedia上面對Comet的解釋也是非常詳盡。

    • 還可以看看AjaxPatterns上面的一些介紹。

    • 最后,CometDaily是個值得去了解最新Comet新聞和知識的地方。

    • =====================================================================================================

    Comet:基于 HTTP 長連接的“服務器推”技術

    ? [http://www.ibm.com/developerworks/cn/web/wa-lo-comet/]

    ps:上述文章應該夠你看明白的了。使用一種吧。但我現在還沒有在項目用推技術,原因,還沒有來得及折騰,但在本地測試都很正常 。

    以下提供protype 和 jquery的 +php實現的代碼例子。[例子代碼來自網上,已測試通過。好用]

    http://bbs.php100.com/read-htm-tid-290215-ds-1.html


    轉載于:https://blog.51cto.com/smileyouth/1630199

    總結

    以上是生活随笔為你收集整理的PHP ServerPush (推送) 技术的探讨的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 男生女生羞羞网站 | 欧美日韩一区二区三区国产精品成人 | 欧美日本韩国 | 精精国产xxxx视频在线播放 | 亚洲欧美中文日韩在线观看 | 在线观看av免费 | 91av视频网 | 欧美成人午夜精品久久久 | 另类专区欧美 | 欧美色图亚洲激情 | 韩国日本在线 | 欧美大片一区二区三区 | 亚洲高清久久 | 中文字幕第6页 | 国产精品99精品 | 日韩精品免费在线观看 | 色男人av | 成人网在线免费观看 | 天天av天天操 | 国产又黄又猛又爽 | 殴美性生活 | 韩国美女主播跳舞 | 国产亚洲欧美日韩高清 | 97成人人妻一区二区三区 | 超碰碰碰| 一区二区乱子伦在线播放 | 亚洲天堂91| 日韩视频一二三 | 99re这里都是精品 | 污视频网站入口 | 狂野欧美性猛交xxxx | 日韩中文字幕在线一区 | 999这里只有精品 | 欧美日韩一区二区不卡 | 男女作爱免费网站 | 久久久精品网站 | 日本中文字幕免费观看 | 精品少妇theporn | 中文字幕日本在线 | mm131在线 | 热久久伊人 | 国产一区二区在线不卡 | 成年人性生活免费视频 | 丁香花五月天 | 天天艹日日干 | 精品美女一区二区 | 捆绑调教在线观看 | 日韩一区二区三区视频在线观看 | 亚洲蜜桃在线 | 国产xxxxxxxxx| 中文字幕乱码亚洲无线三区 | 久久久久久国产精品日本 | 在线观看av中文字幕 | 亚洲乱码电影 | 天天操天天看 | 亚洲天堂视频在线 | 国产精品久久久久久影视 | 国产精品永久久久久久久久久 | 特级免费毛片 | 疯狂伦交 | 天天做天天爱天天爽综合网 | 都市激情亚洲一区 | 亚洲最大福利网站 | 欧美91精品久久久久国产性生爱 | 亚洲av无一区二区三区 | 高清一区二区三区视频 | 中文字幕第一页av | 亚洲特黄毛片 | 国产www| 亚洲国产高清视频 | 综合激情视频 | 国产日韩精品在线 | 精品国产欧美 | 激情网久久 | 在线看片 | 亚洲30p | 国产精品交换 | 欧美日韩一区二区综合 | 亚洲理伦电影 | 懂色一区二区三区免费观看 | 国产一区二区不卡视频 | 日韩黄色精品视频 | 黄色网址网站 | 亚洲午夜无码av毛片久久 | 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 香港黄色网址 | 猛男被粗大男男1069 | 99reav| 鲁鲁久久 | 青娱乐免费在线视频 | 玖玖爱av | 亚州欧美日韩 | 国产日韩欧美综合 | 国产资源网 | 国产第5页| 偷拍亚洲精品 | 成年人午夜 | 成人性生交大片免费看中文 | 中文字幕网站在线观看 |