HTML5 Websockets实时聊天应用程序


HTML5 Websockets for Realtime Chat app?

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

我的问题是:

  1. 目前支持Websockets的浏览器有哪些?

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

  3. 是否有填充物可以帮助?

问候,

目前支持Websockets的浏览器有哪些?

正如前面的回答所指出的。

:

  • http://caniuse.com/websockets
  • http://html5please.com/Websockets

如果一个浏览器不支持它,什么是可能的优雅的回退?

如果你的实时web服务器只支持WebSockets,那么下一个最好的选择是使用web-socket-js,它是一个基于flash的polyfill,创建一个WebSocket对象,可以与本地WebSocket对象以相同的方式进行交互。

额外的回退- 需要由您的实时web服务器支持并由它提供的JavaScript客户端库管理 -按最佳到最差排序:

  1. EventSource -来自服务器->客户端的单一流连接。双向通信可以使用第二个HTTP请求来实现。
  2. HTTP Streaming -使用两个连接来模拟双向连接。消息被"推送"到一个持久的"流"连接server -> client
  3. HTTP长轮询 -也使用两个连接。但是,打开server -> client,直到有新消息可用或发生超时。然后关闭它,如果有任何数据已设置,则在响应中传递。
  4. 标准HTTP轮询 -效率低得多,并且由于大量潜在的浪费请求。然而,如果你的应用提供的更新并不经常发生,并且在轮询请求之间的时间内数据是否"过时"并不重要,那么这可能是一个可接受的解决方案。这里没有push。

选项1。和2。可以通过多种不同的方式实现,具体取决于web浏览器。这就是让他们成为"黑客"的原因。我们现在有双向通信的WebSocket和EventSource(服务器发送的事件),这与HTTP流非常相似,它支持自动重新连接。

有填充物可以帮助吗?

可以,参见前面提到的web-socket-js。

对于PHP,你最好的选择是棘轮。它不在Apache中运行,所以它不会受到同样的限制——它不是用请求/响应范式构建的。

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

    Faye - node.js和ruby
  • 插座。io - node.js和端口可用于各种其他语言
  • SockJS - erlang, node.js, ruby
  • SignalR - net
  • XSockets - .NET

对于其他选项-包括托管服务,如push(我在撰写本文时为其工作)-请查看我正在维护(并接受贡献)的实时web技术指南。

正如NullPoiиteя和Orangepill指出的那样,您可以查看caniuse和html5。这是你的第一个观点/

你的第二和第三点更多的是一个后备选择。你可以使用轮询。(更多信息请看这个答案)

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

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

如果你不想使用websockets和PHP,你应该看看push。我用这个服务来聊天。它就像魔法一样,把你所有的困难都带走。

我希望这些信息能帮助你开发一个漂亮的应用程序

Faye是惊人的,我喜欢push,但我想要一些免费和容易实现的东西,我可以在我自己的服务器上管理。在开始学习Node.js之后,我对Faye印象深刻。它为websockets和http提供了强大的支持,但我喜欢你可以使用Bayeux协议。

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

我们已经做了这样的事情,它是相当花费建立一个稳定的php套接字服务器连接html5 web套接字。

一些信息在我们的常见问题:http://www.livesupportrhino.com/faq/c/4/rhino-websocket

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

但对我来说,我更喜欢使用PHP web套接字服务器通信和javascript的客户端在官方PHP站点的帮助下,您可以开始构建您的web套接字服务器。