從評論到其他答案我會告訴你爲什麼來看,和一個小的,但不能給你這是一個解決方案,因爲我在「相關」邊欄中看到大量解決方案。你將不得不選擇正確的,並知道「爲什麼」你將能夠做出一個受過教育的決定。
對於聊天感覺不錯,響應必須有一些直接性。隨着時間的推移,用戶會注意到一秒鐘的滯後時間,並給人一種不合時宜的感覺。要在瀏覽器中立即或「實時」響應,需要持久連接,以便在新信息進入時立即顯示。在瀏覽器
持久連接由於HTTP的請求/響應的規格是困難的。有一些規範正在努力爲瀏覽器帶來持久連接,但這些瀏覽器並不普遍。在將來,持久連接將由WebSockets和SPDY提供,這兩者都可用於Chrome,Safari和FireFox的最新版本,而IE則滯後一點。
另一個選項持久連接是XMPP。 XMPP是用於Jabber聊天客戶端的協議。由於它是一個開源實現,它已被移植到許多其他用途。存在JavaScript庫,允許您將瀏覽器連接到XMPP套接字並偵聽新消息。我在過去看到的方法是將消息發送到Web服務器,然後讓Web服務器向XMPP服務器通知新消息,然後將新消息廣播給所有用戶。但是,這需要一個XMPP服務器,這會增加系統的複雜性。
大多數用戶都不會在瀏覽器版本的最前沿,所以你需要能夠處理舊的瀏覽器。大多數替代方法涉及打開一個長時間連接到服務器,每當新數據到達時都會響應。下面是用於模擬舊的瀏覽器持久連接的方法列表:
- 的Adobe Flash插槽
- 的ActiveX HTMLFILE(IE)
- 服務器發送的事件(歌劇)
- XHR與多編碼
- XHR長輪詢
這些老方法,和WebSockets的,由庫支持名爲Juggernaut。
UPDATEJuggernaut has been deprecated by the maintainer,有很好的理由:現代瀏覽器都支持通過規範稱爲服務器發送的事件(SSE)的開箱(當然,IE除外)的持久連接。向後兼容性現在由polyfills(What is a polyfill?)處理,作爲棄用後的備註,有幾個好的將SSE帶入傳統瀏覽器。
它必須是PHP嗎?它是否必須是XMPP? – Sixty4Bit
@ Sixty4Bit抱歉,延遲迴復你。必須是PHP,不*必須* XMPP – P3tro
爲什麼不嘗試mibew?這在PHP中很有效。 – Tanmay