2013-06-03 75 views
1

我們計劃使用Websockets技術製作基於HTML5的聊天應用程序。實時聊天應用的HTML5 Websockets?

所以我的問題是:

  1. 哪些是支持本機當前爲今天的的WebSockets的瀏覽器?

  2. 如果瀏覽器不支持它,什麼是可能的優雅回退?

  3. 有沒有可以提供幫助的polyfill?

問候,

+2

所有主要的瀏覽器支持網絡插座http://caniuse.com/websockets並看到瀏覽器中打開此鏈接,您要檢查http://websocketstest.com/ –

+0

http://html5please.com/#Websockets – Orangepill

回答

12

哪些是支持本機當前今天的WebSockets的瀏覽器?

正如在前面的答案中指出的那樣。

請參見:

如果瀏覽器不支持它,什麼是可能的優雅後備?

如果您的實時Web服務器只支持WebSockets的那麼下一個最好的選擇是使用web-socket-js它是一個基於Flash的填充工具,其產生其中在相同的方式進行交互作爲本地WebSocket對象WebSocket對象。

附加回退 - 這需要通過您的實時web服務器通過提供的 JavaScript客戶端庫支持和託管 - 被下令從最好到最差:

  1. 的EventSource - 單個流連接從服務器 - >客戶端。使用第二個HTTP請求可以實現雙向通信。
  2. HTTP Streaming - 使用兩個連接來模擬雙向連接。消息通過持久的「流式」連接服務器「推送」 - >客戶端
  3. HTTP長輪詢 - 也使用兩個連接。但是,服務器 - >客戶端處於打開狀態,直到有新消息可用或發生超時。然後它會關閉,如果有任何數據已經設置,它會在響應中發送。
  4. 標準HTTP輪詢 - 效率低得多,並且由於潛在浪費的大量請求。但是,如果更新您的應用程序並不經常發生,並且在輪詢請求之間數據「過期」並不重要,那麼這可能是一個可接受的解決方案。這裏沒有「推」。

選項1.和2.可以通過各種不同的方式實現,具體取決於網頁瀏覽器。這是什麼讓他們'黑客'。我們現在有用於雙向通信的WebSocket和EventSource(服務器發送的事件),它與HTTP Streaming非常相似,並且支持自動重新連接。

有沒有可以幫助的polyfill?

是的,參見前面提到的web-socket-js

對於PHP,您最好的選擇是Ratchet。它不在Apache內運行,所以它不會受到同樣的限制 - 它不是在考慮請求/響應範例的情況下構建的。

最常用的解決方案,我現在看到的是:

對於其他選項 - 包括像Pusher託管服務(誰我在寫作的時候工作) - 看看這個realtime web tech guide這我保持(並接受的捐款對)。

1

正如NullPoiиteя和Orangepill指出,你可以看看caniusehtml5please。所以這是你的第一點/

你的第二點和第三點更多的是後備選項。那麼你可以使用投票。 (有關更多信息,請參閱此answer)。

那麼這不是在你的問題,但你應該考慮的一點(因爲你標記在PHP下)。只要用戶處於活動狀態,Websockets就具有活動連接。 PHP並非如此,你的服務器會涌入連接,而且一個意思不好的人也可以很容易地確保服務器被淹沒。

這是因爲如果你想要它,你需要設置超時限制爲0(所以從不)。所以你的服務器會堆積請求,直到它滿了。 (它如何作爲連接而死,我不知道)。

如果你不想使用websockets和PHP,你應該看看pusher。我將這項服務用於我自己的聊天。它像魔術一樣運作,把所有困難的事情從你身上帶走。

我希望信息幫助您開發一個應用程序尼夫

+0

Pusher付款,我正在尋找的東西,可以幫助我把整個東西放在我的服務器本身。所以是的,我目前正在調查socket.io –

+0

是的,我認爲PHP會導致各種各樣的問題,所以我想知道是否有任何方法來防止內存丟失,像推送服務正在使用的東西? –

+0

你可以做的是使用websockets和輪詢。不理想,但您使用WebSocket進行通信,並且輪詢每小時發送一條消息,如果未收到,連接將被清空。再次不理想。 PHP不是用於這種通信的 – MKroeders

0

Faye是驚人的,我喜歡Pusher,但我想要一些自由而容易實現的東西,我可以在自己的服務器上進行管理。在開始學習Node.js之後,我對Faye留下了深刻的印象。它爲websockets,http提供了很好的支持,但我喜歡你可以使用Bayeux協議。

http://faye.jcoglan.com/node.html

0

,如果你慣於打造成爲學習你可以使用的node.js這是一個開始,你也可以找到很多資源,導致你從頭開始的好地方着想。

但對我來說,我寧願使用PHP的Web套接字服務器進行交際和JavaScript克倫特端 與official PHP site幫助就可以開始建立自己的網絡套接字服務器。

+0

您是否真的認爲PHP是一個很好的WebSocket服務器,它的內存問題和所有? –

+0

請定義(內存問題),這取決於你不會創建的應用程序的類型 –