当前位置: 首页 > 知识库问答 >
问题:

如何在原生JavaScript和Node.js中使用长轮询?

颛孙飞鸾
2023-03-14

我需要为聊天应用程序实现长轮询。我已经搜索过了,但我只找到了如何使用jQueryJavaScript中实现它。如何仅使用原生JavaScriptnode.js实现它?你能给我介绍一些相关的文章或资料吗?

共有1个答案

董花蜂
2023-03-14

问:如何在本地JavaScript中在NodeJS中进行长轮询?

答:我想首先你需要了解长轮询模型是如何工作的。如果您还没有任何线索,那么RFC-6202规范是一个很好的起点。

它是关于客户端向服务器发送请求并等待直到返回响应。

const express = require('express');
const app = express();
const bodyParser = require('body-parser');

var requestCounter = 0;

var responses = {
  /* Keyed by room Id =*/
  "room_abc" : [ /* array of responses */]
};

app.get('/', function (req, res) {
    requestCounter += 1;

    var room = /* assuming request is for room_abc */ "room_abc";

    // Stash the response and reply later when an event comes through
    responses[room].push(res);

    // Every 3rd request, assume there is an event for the chat room, room_abc.
    // Reply to all of the response object for room abc.
    if (requestCounter % 3 === 0) {
        responses["room_abc"].forEach((res) => {
            res.send("room member 123 says: hi there!");
            res.end();
        });
    }
});

app.use(bodyParser.text({ type: 'text/*' }));
app.use(bodyParser.json());

app.listen(9999, function () {
    console.log('Example app listening on port 9999!')
})

这里的想法是,首先存储请求的response对象,当事件通过时,假设每第三次HTTP调用,然后循环遍历所有响应并对其进行回复。对于您的聊天应用程序,触发响应的事件可能是当有人向聊天室发送消息时。

 类似资料:
  • 嗨,我知道在长轮询中,你保持与服务器的连接打开很长时间,直到你从服务器得到响应,然后再次轮询,等待下一个响应。然而,我似乎不明白如何编写它。下面的代码使用长轮询,但我似乎不明白

  • 本文向大家介绍使用原生的javascript来实现轮播图,包括了使用原生的javascript来实现轮播图的使用技巧和注意事项,需要的朋友参考一下 下面看下js轮播图的实现代码,具体代码如下所示: 补充:原生javascript实现banner图自动轮播切换 一般在做banner轮播图的时候都是用jquery,因为代码少,方便,不需要花费很长的时间去获取某个元素作为变量,然后再进行操作,只要一个$

  • 问题内容: 我想知道如何使用ajax push。我从各种Web文章中学到,可以通过使用一些程序(例如COMET,APE(AJAX PUSH ENGINE)等)来获得Ajax push。但是我想知道是否有更简单的使用方法以及使用哪种语言实现ajax推送。因为在我所看到的文章中。他们正在使用Java。我没有学过的:(所以我想知道是否有类似的东西:您服务器中的javascript,它为特定项目设置了一个

  • 本文向大家介绍原生Javascript和jQuery做轮播图简单例子,包括了原生Javascript和jQuery做轮播图简单例子的使用技巧和注意事项,需要的朋友参考一下 接触jquery也有一段时间了,今天刚好利用轮播图来练练手。博文的前面会介绍一个简单用jquery做轮播图的例子,中间会插入一些关于轮播图更多的思考,在后面会用Javascript的方法来写一个轮播图,最后则是关于jquery和

  • 问题内容: 我正在尝试在Flask框架下使用JQuery和Python进行长时间轮询。 在PHP中进行了长时间的轮询之后,我尝试以相同的方式进行处理: 具有while(true)循环的脚本/函数,定期检查更改,例如,数据库中每0.5秒更改一次,并在发生更改时返回一些数据。 因此,在我的ini .py文件中,我创建了一个到/ poll的app.route,以供JQuery调用。jQuery向其提供有

  • 问题内容: 因此,在这段(简化的)代码中,当有人点击我的节点服务器时,我向另一个网站发出GET请求,并将HTML页面标题打印到控制台。工作良好: 但是,在实际应用中,用户可以指定要命中的URL。这意味着我的节点服务器可能正在下载20GB的电影文件或其他文件。不好。content- length报头没有被用来停止它,因为它并不是所有服务器都传输的。然后问题是: 我如何告诉它在收到第一个10KB之后停