2013-06-03 76 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

请定义(内存问题),这取决于你不会创建的应用程序的类型 –