【问题标题】:AJAX or Socket.IO make more sense in my situation?AJAX 或 Socket.IO 在我的情况下更有意义吗?
【发布时间】:2014-09-24 18:22:45
【问题描述】:

我一直在使用 AJAX 做一些事情,有时每秒需要几个 POST。每个帖子都返回一个 JSON 对象(由发布到的 PHP 文件生成,约 11,000 字节),平均延迟在 30 毫秒到 250 毫秒之间,具体取决于我是使用 wifi 还是有线,但大约每 1/15 调用它就会出现峰值高达约 4000 毫秒。我正在尝试解决这个问题,截至目前,我看到了两个选项:

  1. 在 AJAX 调用上引发超时,并让它在失败时调用 GET(POST 仍应通过,返回总是超时)或...

  2. 把整个事情删掉,学习 node.js,这样我就可以使用 websockets 来解决这个问题。

据我所知,任何一种解决方案都是基于原始呼叫失败的原因。如果 AJAX 调用有问题,那么新的 GET 应该可能会通过并解决问题。但如果它与服务器本身有关,那么逻辑上 GET 也会超时,这是服务器的问题,我已经死在水中了。

由于我还没有使用 websockets 的经验,我希望能就下一步采取的最佳行动得到一些反馈。感谢您的意见。

如果有帮助,我很可能会通过一些偷偷摸摸的编码将返回的有效负载减少到 1/15 大小。这会产生影响吗?

【问题讨论】:

  • 你也可以use websockets with PHP,它们不限于node.js。
  • 我不会做 GET 事情......如果你在服务器有机会处理 POST 之前 GET 会发生什么?
  • 如果网络正常(并且浏览器没有问题),那么您的服务器肯定有问题。调查。

标签: javascript ajax node.js


【解决方案1】:

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

  • 由于连接保持打开状态,您的请求会跳过 DNS 查找和路由以降低延迟。这意味着您发出的每个 POST 请求的开销要低得多。
  • 如果您曾预见向用户推送数据,WebSockets 是事实上的实现方式。 Ajax 轮询已经过时了。

也就是说,您必须将后端逻辑移植到 JavaScript。您必须将部署策略更改为支持 Node 应用程序的服务器。您将不得不处理学习新环境的问题——也可能会产生一些开销。

在探索 Node 之前,请考虑上述缺点。我认为这是一项很棒的技术,但我也会研究以下方法,尤其是在您时间紧迫的情况下。

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

总而言之,总会有取舍。如果您没有时间紧迫,鉴于 Node 和 SocketIO 以及旋风,它们正在成为非常流行的 Web 技术,值得学习。

【讨论】:

  • 谢谢,不幸的是,在这种情况下无法批量处理我的帖子,我会做一些测试来判断减少支付的影响有多大,并更多地研究 websockets。服务器是否需要运行节点?还是我可以轻松获得?
  • 是的,如果你在 Linux 上,你可以! Nodejs w/ Package Manager
【解决方案2】:

把所有东西都删掉,学习 node.js,这样我就可以使用 websockets 来解决这个问题。

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

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

在原始 websocket 之上获取一些框架,例如 primussocket.io,祝你好运;)

【讨论】:

    猜你喜欢
    • 2011-02-06
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 2014-05-05
    相关资源
    最近更新 更多