【问题标题】:HTML5 Websockets for Realtime Chat app?用于实时聊天应用的 HTML5 Websockets?
【发布时间】:2013-05-29 06:04:27
【问题描述】:

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

所以我的问题是:

  1. 目前有哪些浏览器原生支持 Websockets

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

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

问候,

【问题讨论】:

标签: php html websocket chat


【解决方案1】:

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

您的第二点和第三点更多的是备用选项。那么你可以使用轮询。 (有关更多信息,请参阅此answer)。

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

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

如果您不想使用 websockets 和 PHP,您应该查看 pusher。我将此服务用于我自己的聊天内容。它就像魔术一样工作,让你远离所有困难的事情。

我希望这些信息可以帮助您开发一个 nive 应用程序

【讨论】:

  • Pusher 是付费的,我正在寻找可以帮助我将整个东西放在我的服务器本身的东西。所以是的,我目前正在研究 socket.io
  • 是的,我认为 PHP 最终会引发各种问题,所以我想知道有什么方法可以防止内存丢失,比如推送服务正在使用的东西吗?
  • 你可以做的是使用 websockets 和轮询。不理想,但您使用 websocket 进行通信,并且轮询每小时发送一条消息,如果未收到连接将被清空。再次不理想。 PHP 不适合这种通信
【解决方案2】:

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

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

见:

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

如果您的实时 Web 服务器仅支持 WebSockets,那么下一个最佳选择是使用 web-socket-js,它是一个基于 Flash 的 polyfill,它创建一个 WebSocket 对象,可以在同一对象中进行交互作为原生 WebSocket 对象的方式。

额外的备用 - 需要由您的实时网络服务器支持并由它提供的 JavaScript 客户端库管理 - 按从高到低的顺序排列:

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

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

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

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

对于 PHP,您的最佳选择是 Ratchet。它不在 Apache 中运行,因此不会受到同样的限制 - 它不是在构建时考虑到请求/响应范式。

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

对于其他选项 - 包括托管服务,例如 Pusher(我在撰写本文时工作) - 请查看我正在维护的 realtime web tech guide(并接受贡献)。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 你真的认为 PHP 是一个很好的做 WebSocket 服务器的内存问题吗?
      • 请定义(内存问题),这取决于您不会创建的应用类型
      【解决方案5】:

      我们已经做了这样的事情,构建一个稳定的 php socket server 并连接 html5 web sockets 是一项艰巨的任务。

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

      【讨论】:

        猜你喜欢
        • 2011-05-12
        • 1970-01-01
        • 2014-07-08
        • 2017-07-26
        • 1970-01-01
        • 1970-01-01
        • 2021-03-26
        • 2016-02-15
        • 1970-01-01
        相关资源
        最近更新 更多