【问题标题】:Keep the connection between app and NodeJS alive for 2 minutes保持应用程序和 NodeJS 之间的连接 2 分钟
【发布时间】:2018-07-13 19:19:44
【问题描述】:

我正在尝试对 NodeJS 服务器进行 jQuery ajax 调用,然后服务器将轮询另一个端点,最长 2 分钟。

不幸的是,就在服务器完成 POLLING 并即将响应 jQuery ajax 后,连接被终止。

我如何才能让这条路线的连接保持 2 分钟,而不是每条路线。这是我现在的 AJAX 帖子:

$.ajax({
    url:  $(this).attr("action"),
    type: 'POST',
    data: formdata,
    processData: false,
    contentType: false,
    beforeSend: function(request) {
        request.setRequestHeader("Keep-Alive", 'timeout=121, max=100')
    },
    success: function (res) {        
        if (res.status === 200) {
            Materialize.toast(res.msg, 4000, 'green')
        }
        else {
            Materialize.toast(res.msg, 4000, 'red')
        }
    },
    error: function (xhr, status, error) {
        Materialize.toast(error, 4000, 'red')
    }
})

当我检查请求标头时,没有设置“Keep-Alive”,我错过了什么?

【问题讨论】:

    标签: javascript jquery node.js ajax


    【解决方案1】:

    浏览器控制此超时,因此您无能为力。我认为它们都在 1-2 分钟左右(我认为这是非常公平的),显然,浏览器不能让套接字保持打开更长时间,因为它可能导致性能问题、内存泄漏等。你可以在本地覆盖它们但是这对除了你自己以外的任何人都没有任何好处——因为默认用户将拥有默认的KeepAliveTimeout

    您真正应该考虑的是一个更好的解决方案来实现您想要的。长时间保持套接字打开的长时间运行的任务是错误的。

    我会考虑执行一个初始 API 调用,该调用会触发进程启动,然后只向 UI 返回一个成功响应,说“是的,这已经开始处理......”。然后在您的 API 上使用websockets 向 UI 触发一个事件。有很多 npm 软件包可以支持这一点。

    https://www.npmjs.com/package/websocket

    https://www.npmjs.com/package/ws

    您提出的解决方案无法在现实世界中生存,因此改变您对如何实现此目标的想法是解决此问题的最佳方法。可能不是您希望的答案,但整体改变这将大大改善您的解决方案的一切。

    祝你好运。

    【讨论】:

    • 您好,谢谢,感谢您提供的信息!谢谢
    【解决方案2】:

    您可以使用web socketsserver side events (SSE) 来满足您的要求。而不是增加KeepAliveTimeouttime。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-10
      • 2016-01-10
      • 2022-09-30
      • 1970-01-01
      • 2012-12-05
      • 2015-12-29
      • 1970-01-01
      相关资源
      最近更新 更多