AJAX或Socket.在我的情况下,这更有意义

AJAX or Socket.IO make more sense in my situation?

本文关键字:更有意义 情况下 我的 Socket AJAX      更新时间:2023-09-26

我一直在使用AJAX做一些事情,有时每秒需要几个POST。每个post返回一个JSON对象(由PHP文件生成,约11,000字节),平均延迟在30ms和250ms之间,这取决于我是在wifi还是有线,但每大约1/15个调用它峰值高达约4000ms。我正试图找到一种方法来解决这个问题,因为现在我看到两个选项:

  1. 在AJAX调用上抛出一个超时,并让它在失败时调用GET (POST仍然应该通过,它的返回旅程总是超时)或…

  2. 把整个东西砍掉,学习node.js,这样我就可以使用websockets来纠正这个问题。

任何解决方案,据我所见是基于为什么原来的调用失败。如果AJAX调用出了问题,那么应该可以通过一个新的GET来解决问题。但如果是服务器本身的问题,那么逻辑上GET也会超时,这是服务器的问题,我就死在水里了。

因为我还没有使用websockets的经验,所以我希望能得到一些关于下一步采取的最佳行动的反馈。谢谢你的建议。

如果有帮助的话,我可以用一些狡猾的编码将返回的有效载荷减少到1/15的大小。这会产生影响吗?

WebSockets是一个很好的选择!实际上,使用SocketIO非常简单,学习曲线也很浅。

  • 因为连接保持打开,您的请求跳过DNS查找和路由以降低延迟。这意味着您发出的每个POST请求的开销要低得多。
  • 如果你曾经预见到数据推送给你的用户,WebSockets就是实现它的事实上的方式。Ajax轮询已经过时了。
也就是说,你必须将你的后端逻辑移植到JavaScript中。您必须将部署策略更改为支持Node应用程序的服务器。你必须学习一个新的环境——这也会有一些开销。

在探索Node之前,请考虑一下上面的缺点。我认为这是一项伟大的技术,但我也会研究一下以下方法,特别是如果你时间紧迫的话。

  • 1/15的尺寸减少是完全值得的。实际上,这两种情况都是值得的。
  • 您可以对来自客户端的POST请求进行任何类型的批处理吗?如果后续请求依赖于前一个POST请求的结果,则不能这样做。在这种情况下,我强烈建议使用WebSockets。

总而言之,总有权衡。如果你没有时间,考虑到Node和SocketIO和whirl,它们正在成为非常流行的web技术,值得学习。

把整个东西砍掉,学习node.js,这样我就可以使用websockets来潜在地纠正这个问题。

用错误的工具做事是没有意义的。如果需要实时通信,请使用开箱即用的服务器,比如node.js(可能是最容易从PHP进入的服务器)。

因为我还没有使用websockets的经验

在原始的websockets之上获得一些框架,如primus或socket。祝你好运!