7

我已经在 PHP 中使用了一些 AJAX 来处理提交表单之类的事情,而且我最近开始研究 websockets。我按照本教程了解基础知识。据我所知,websockets 保持连接打开,而 AJAX 打开和关闭请求。

我的问题是,如果您只是提交表单或像 auto_complete 之类的简单任务(无论如何都有一个 jQuery 插件),websockets 是否比 AJAX 提供任何优势?也许本教程不是最好的,但似乎要让 websockets 工作(至少使用 PHP)涉及更多的代码,而不仅仅是一个简单的 AJAX 调用(或使用捆绑它的 jQuery)。我在几个地方读到它会更快一些,但如果我正在处理一些没有收到大量请求的东西,它真的会有所作为吗?如果我错了,请纠正我,但并非所有浏览器都支持 websocket,对吧?

4

3 回答 3

20

Websocket 有两个优点。

  1. 它们的开销要少得多,从而带来更好的网络性能

  2. 它们允许服务器发送客户端未明确请求的数据。

第二个是最重要的优势。

在 AJAX 中,服务器发送的所有内容都必须是对客户端先前请求的响应,并且每个请求只能回答一次。但是在许多应用程序中,尤其是多用户应用程序中,事件发生在服务器上,这些事件必须立即推送到客户端。在 AJAX 中有一些解决方法,比如延迟对请求的回答,直到有东西要报告(长轮询),但这些都很脏。这就是为什么有 Websockets 的原因。使用 websocket 连接,服务器可以在需要时随时向客户端发送消息,而无需等待来自客户端的请求。

但不幸的是,WebSockets 也有缺点:

  1. Web 开发框架还没有很好地支持它们(还没有!)
  2. 并非所有网络浏览器都支持它(但大多数桌面浏览器已经支持)
  3. 许多代理和反向代理无法中继 websocket 流量(还!)
于 2012-12-07T14:33:31.047 回答
9

实际上,AJAX 和 websockets 是两个不同的类别。AJAX 是一种概念,一种技术。使用 AJAX,您可以执行(作为首字母缩略词的意思)异步请求,因此浏览器不需要重新加载/刷新整个页面。这对不同的事情都有好处,例如检查表单输入。Websockets 是一种协议,技术上与 http 完全一样,除非连接不会在传输后关闭。这对于网络服务器可能需要联系客户端(http 不能这样做)的事情很有用,例如推送服务(聊天或邮件客户端,即使用户不刷新,您也希望更新用户界面页面或游戏)。它消除了 http 开销,因为整个事情只需要在开始时完成一次。

因此,它们用于不同的目的,即使它们重叠。对于您的自动完成,我认为它不会对性能产生真正的影响。它甚至是一个动作/反应的事情,所以用户输入或提交(不管)什么会导致一个请求并且服务器响应。

于 2012-12-07T14:54:01.580 回答
1

Websockets 是一项强大的技术,当然可以满足您提到的有限用例,但可能存在与旧浏览器和网络中介的兼容性问题。事实上,有些人甚至建议在不支持 Websocket 的情况下使用 HTTP 回退。

除非您有需要 websocket 的要求,例如全双工双向通信,否则您最好使用现有的基于 AJAX 的解决方案。

如果您需要将通知推送到您的用户界面,Websockets 可能是一个好主意,但如果您确实在寻找表单提交和自动完成,那么这些问题已经使用 Ajax 解决了。

于 2012-12-07T14:36:58.580 回答