我们计划使用 Websockets 技术制作一个基于 HTML5 的聊天应用程序。
所以我的问题是:
目前有哪些浏览器支持原生Websockets?
如果浏览器不支持它,什么是可能的优雅回退?
有没有可以提供帮助的polyfill?
问候,
目前有哪些浏览器支持原生 Websockets?
正如前面的答案所指出的。
看:
如果浏览器不支持它,什么是可能的优雅回退?
如果您的实时 Web 服务器仅支持 WebSockets,那么下一个最佳选择是使用web-socket-js,它是一个基于 Flash 的 polyfill,它创建一个对象,该对象以与本机对象WebSocket
相同的方式进行交互。WebSocket
其他回退 -需要由您的实时 Web 服务器支持并由它提供的 JavaScript 客户端库管理- 按最佳到最坏的顺序排列:
选项 1. 和 2. 可以通过多种不同的方式实现,具体取决于 Web 浏览器。这就是使他们成为“黑客”的原因。我们现在有用于双向通信的 WebSocket 和 EventSource(服务器发送的事件),它与 HTTP 流非常相似,但它还支持自动重新连接。
有没有可以提供帮助的polyfill?
是的,请参阅前面提到的 web-socket-js 。
对于 PHP,您最好的选择是Ratchet。它不在 Apache 中运行,因此不会受到同样的限制——它不是在构建时考虑到请求/响应范式。
我现在看到的最常用的解决方案是:
对于其他选项——包括像Pusher这样的托管服务(我在撰写本文时为之工作)——请查看我正在维护(并接受贡献)的这个实时网络技术指南。
正如 NullPoiиteя 和 Orangepill 所指出的,您可以查看caniuse和html5please。所以这是你的第一点/
您的第二点和第三点更多的是备用选项。那么你可以使用轮询。(有关更多信息,请参阅此答案)。
好吧,这不是你的问题,而是你应该考虑的一点(因为你在 php 下标记了它)。只要用户处于活动状态,Websockets 就具有活动连接。PHP 不适合这个,你的服务器会淹没在连接中,而且一个恶意的人可以很容易地确保服务器被淹没。
这是因为如果你想要它,你需要将超时限制设置为 0(所以永远不要)。因此,您的服务器将堆叠请求直到它已满。(我不知道它是如何充当连接的)。
如果你不想使用 websockets 和 PHP,你应该看看pusher。我将此服务用于我自己的聊天内容。它就像魔术一样工作,将所有困难的事情从你身上带走。
我希望这些信息可以帮助您开发一个 nive 应用程序
如果你不想为了学习而构建它,你可以使用node.js,它是一个很好的起点,你也可以找到很多资源,引导你从头开始。
但对我来说,我更喜欢在官方 PHP 网站的帮助下使用 PHP Web 套接字服务器进行通信,将 javascript 用于客户端,您可以开始构建您的 Web 套接字服务器。
Faye 很棒,我喜欢 Pusher,但我想要一些免费且易于实现的东西,我可以在自己的服务器上进行管理。在开始学习 Node.js 之后,我对 Faye 印象深刻。它为 websockets、http 提供了很好的支持,但我喜欢你可以使用 Bayeux 协议。
我们已经做了这样的事情,构建一个与 html5 web sockets 连接的稳定的 php socket server 是一项艰巨的任务。
关于我们的常见问题解答的一些信息:http ://www.livesupportrhino.com/faq/c/4/rhino-websocket