用于实时聊天应用的HTML5 Websockets?

时间:2013-06-03 06:03:16

标签: php html5 websocket chat

我们计划使用Websockets技术制作基于HTML5的聊天应用。

所以我的问题是:

  1. 目前支持 Websockets 的浏览器目前是什么?

  2. 如果浏览器不支持,可能会有什么优雅的回退?

  3. 是否有可以提供帮助的polyfill?

  4. 此致

5 个答案:

答案 0 :(得分:12)

  

目前支持Websockets的浏览器目前是什么?

正如之前的答案所指出的那样。

请参阅:

  

如果浏览器不支持,那么可能的优雅后备是什么?

如果您的实时网络服务器仅支持WebSockets ,则下一个最佳选择是使用web-socket-js它是基于Flash的polyfill,它会创建一个WebSocket对象,可以进行交互与本机WebSocket对象的方式相同。

其他后备广告 - 需要您的实时网络服务器支持,并由其提供的JavaScript客户端库管理 - 最好的订购次序:

  1. EventSource - 来自服务器的单个流连接 - >客户。使用第二个HTTP请求可以实现双向通信。
  2. HTTP Streaming - 使用两个连接来模拟双向连接。消息被“推送”在持久的“流”连接服务器上 - >客户端
  3. HTTP长轮询 - 也使用两个连接。但是,服务器 - >打开客户端,直到新消息可用或发生超时。然后关闭它,如果已经设置了任何数据,它将在响应中传递。
  4. 标准HTTP轮询 - 由于大量潜在的浪费请求而效率低得多。但是,如果您的应用程序提供的更新不会经常发生,并且如果数据在轮询请求之间的时间“过时”无关紧要,那么这可能是一个可接受的解决方案。这里没有“推”。
  5. 选项1.和2.可以通过多种不同的方式实现,具体取决于Web浏览器。这就是他们'黑客'的原因。我们现在有用于双向通信的WebSocket和EventSource(服务器发送的事件),它与HTTP Streaming非常相似,并且还支持自动重新连接。

      

    是否有可以提供帮助的polyfill?

    是的,请参阅前面提到的web-socket-js

    对于PHP,您最好的选择是Ratchet。它不在Apache中运行,因此它没有受到相同的限制 - 它没有考虑到请求/响应范例。

    我现在看到的最常用的解决方案是:

    对于其他选项 - 包括Pusher等托管服务(我在撰写本文时为之工作) - 请查看我正在维护的realtime web tech guide(以及接受捐款)。

答案 1 :(得分:1)

正如NullPoiиteя和Orangepill所指出的那样,你可以看看caniusehtml5please。这是你的第一点/

你的第二点和第三点更多的是后备选项。那么你可以使用民意调查。 (有关详细信息,请参阅此answer。)

这不是你的问题,而是你应该考虑的一点(因为你在php下标记了它)。只要用户处于活动状态,Websockets就会有活动连接。 PHP不是这样的,你的服务器会涌入连接,而且意义不好的人可以很容易地确保服务器被淹没。

这是因为如果你想要它,你需要将超时限制设置为0(所以从不)。因此,您的服务器会将请求堆叠起来,直到它满了。 (它如何作为连接死我不知道)。

如果你不想使用websockets和PHP,你应该看看pusher。我将这项服务用于我自己的聊天事务。它就像魔法一样,可以让你处理所有困难的事情。

我希望这些信息可以帮助您开发一款应用

答案 2 :(得分:0)

Faye很棒,我喜欢Pusher,但我想要一些免费且易于实现的东西,我可以在自己的服务器上管理。在开始学习Node.js后,我真的对Faye印象深刻。它为websockets,http提供了很好的支持,但我喜欢你可以使用Bayeux协议。

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

答案 3 :(得分:0)

如果您为了学习而不想构建它,可以使用 node.js 它是一个很好的起点,你也可以找到很多资源引导你从头开始。

但对我来说,我更喜欢使用PHP网络套接字服务器进行通信,并使用javascript进行清理 在official PHP site的帮助下,您可以开始构建您的Web套接字服务器。

答案 4 :(得分:0)

我们已经完成了这样的事情,并且构建一个与html5 websockets相关的稳定的php套接字服务器是一项相当大的任务。

有关常见问题解答的一些信息:http://www.livesupportrhino.com/faq/c/4/rhino-websocket