对于使用PHP的简单应用程序,Websocket优于AJAX

use*_*854 7 php ajax jquery websocket

我已经使用了一些带有PHP的AJAX来提交表单,我最近开始研究websockets.我按照本教程了解基础知识.从我收集的信息来看,websockets保持连接打开,而AJAX打开并关闭请求.

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

Phi*_*ipp 19

Websockets有两个优点.

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

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

第二个是最重要的优势.

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

但遗憾的是WebSockets也有缺点:

  1. 它们没有得到Web开发框架的良好支持(但是!)
  2. 并非所有网络浏览器都支持它(但大多数桌面浏览器已经支持)
  3. 许多代理和反向代理无法中继websocket流量(还是!)

  • 对于一个简单的表单提交,我宁愿建议使用AJAX,因为在该用例中,服务器只会*对客户端的操作做出反应*,而不是*act*自己. (2认同)

Cra*_*vid 9

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

所以,它们用于不同的目的,即使它们重叠.对于你的自动完成,我认为它不会对性能产生真正的影响.它甚至是一个动作/反应的东西,因此用户键入或提交(无论)什么可以导致请求和服务器响应.