use*_*016 7 javascript long-polling node.js
我需要long polling为聊天应用程序实现.我一直在寻找,但我只是在JavaScript使用中找到了如何实现它JQuery.我怎样才能使用native JavaScript和实现它node.js?你能指导我一些相关的文章或材料吗?
Sam*_*Toh 13
问:如何做长轮询在本机Javascript中nodeJS?
答:我想首先你需要了解长轮询模型的工作原理.如果您还没有任何线索,那么RFC-6202规范是一个很好的起点.
万一你懒得读.它是关于客户端发送request到server并等待返回响应.
从规范我们知道,首先客户端必须发出http具有无限或至少高超时值的请求.然后,作为您的nodeJs应用程序的服务器应该将所有传入的请求存储到数据结构中,基本上是一个保留区域.您的应用程序将基本上保留所有response对象,直到事件被触发,然后您适当地回复响应.
考虑这个伪代码:
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!')
})
Run Code Online (Sandbox Code Playgroud)
在这里编写一个工作示例相对耗时,但上面的代码是如何实现长轮询的一个很好的例子NodeJS.
如果您已postman安装或curl可以HTTP调用http://localhost:9999/使用方法GET.您应该注意到,在前两个呼叫中,您将无法得到响应,而当您解雇第三个呼叫时,您将收到所有先前和当前呼叫的响应.
这里的想法是你首先存储请求的response对象,当事件发生时,假设在每个第3次HTTP调用时,你循环遍历所有响应并回复它们.对于您的聊天应用程序的情况,触发响应的事件可能是当某人触发到聊天室的消息时.
| 归档时间: |
|
| 查看次数: |
9429 次 |
| 最近记录: |