【问题标题】:Web Sockets questions网络套接字问题
【发布时间】:2011-03-06 18:13:24
【问题描述】:
我有几个关于Web Sockets的问题。
最新的 Firefox 4.0 nightlies 支持 Web Sockets。 Webkit(Chrome 4 + Safari 4/5)也是如此。根据 Microsoft 的说法(在稳定版本之前),Internet Explorer 9 应该会在某个时候提供 Web Sockets。
无论如何,我的问题是:
我正在构建 JavaScript 管理界面 来管理网站。如果我告诉您我确实不需要需要关心浏览器兼容性,我是否应该使用 Web Sockets 来进行客户端-服务器通信而不是 XMLHttpRequest?
与使用 XMLHttpRequest 的通常情况相比,Web 套接字是否会导致更快的保存、删除和更新调用?请求会更即时吗?
我知道 HTML5 的 navigator.online 和 window.addEventListener('offline', ...),但是使用 Web 套接字(在连接丢失时),我是否能够更准确、更快地检测连接问题?我的意思是,当我关闭 Internet 连接或使用防火墙阻止它时,Firefox 似乎仍然声明 navigator.online 是 true。使用 Web Sockets,似乎与服务器的连接会立即丢失,因此我可以更准确地检测连接问题?
我可以用 pure PHP 支持 Web Sockets 服务器端吗,这样代码可以与其他 Web 服务器移植(没有需要安装任何 Apache模块或进行其他定制)。我想将软件分发到几个地方,而不必要求人们将各种模块安装到他们的 HTTPD 上。
我希望您能尽可能多地回答这些问题。我对答案很感兴趣。
【问题讨论】:
标签:
javascript
html
browser
websocket
【解决方案1】:
我正在构建一个 JavaScript 管理界面来管理网站。如果我告诉你我不需要关心浏览器的兼容性,我是否应该使用 Web Sockets 而不是 XMLHttpRequest 来进行客户端-服务器通信?
在我看来,您想使用 WebSockets 只是为了它。使用 WebSockets 的主要原因是当您想将数据从服务器推送到客户端时。如果您的应用程序不需要这个,您可能不应该使用 WebSockets。
与使用 XMLHttpRequest 的通常情况相比,Web Sockets 会导致更快的保存、删除和更新调用吗?请求会更即时吗?
由于没有标头,您可能会在两端(客户端和服务器)上节省一些时间。但收益可能很小。
使用 Web Sockets(在连接丢失时),我能否更准确、更快速地检测连接问题?
是的,当 WebSocket 关闭时会立即触发一个事件。替代方案是长轮询或定期 XHR。或事件客户端存储。
我可以用纯 PHP 支持 Web Sockets 服务器端吗,这样代码可以与其他 Web 服务器移植
首先我建议你通读this。 WebSocket 不能以同步方式很好地工作。 PHP 和 apache 不能以异步方式很好地工作。虽然therearesomeimplementations,但是很多已经过时了。我个人会为此使用其他语言,例如ruby、python、java 或server-side javascript。仅仅是因为这些语言对异步模型有更好的支持,而且 WebSocket 实现更复杂。
WebSocket 协议目前仍是草案,可以更改。就像a few weeks ago 一样。所以你的代码很可能会出错。
我的建议是:不要仅仅为了它而使用 WebSockets。如果您有一个实时事件驱动的应用程序,那么它可能是正确的选择。确保您了解 WebSocket 的用途以及它在服务器端的作用,包括事件驱动的应用程序。不要将它用于任何生产,它太脆弱了。