我们计划使用Websockets技术制作一个基于HTML5的聊天应用。
我的问题是:
-
目前支持Websockets的浏览器有哪些?
-
如果浏览器不支持它,什么是可能的优雅的回退?
-
是否有填充物可以帮助?
问候,
目前支持Websockets的浏览器有哪些?
正如前面的回答所指出的。
:
- http://caniuse.com/websockets
- http://html5please.com/Websockets
如果一个浏览器不支持它,什么是可能的优雅的回退?
如果你的实时web服务器只支持WebSockets,那么下一个最好的选择是使用web-socket-js,它是一个基于flash的polyfill,创建一个WebSocket
对象,可以与本地WebSocket
对象以相同的方式进行交互。
额外的回退- 需要由您的实时web服务器支持并由它提供的JavaScript客户端库管理 -按最佳到最差排序:
- EventSource -来自服务器->客户端的单一流连接。双向通信可以使用第二个HTTP请求来实现。
- HTTP Streaming -使用两个连接来模拟双向连接。消息被"推送"到一个持久的"流"连接server -> client
- HTTP长轮询 -也使用两个连接。但是,打开server -> client,直到有新消息可用或发生超时。然后关闭它,如果有任何数据已设置,则在响应中传递。
- 标准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套接字服务器。