node.js - socket.io 中的 "xhr-polling"配置有什么作用?

标签 node.js socket.io long-polling

我有一个带有 socket.io 的 node.js 服务器:

var io = require('socket.io').listen(app);

// assuming io is the Socket.IO server object
io.configure(function () { 
      io.set("transports", ["xhr-polling"]); 
      io.set("polling duration", 10); 
    });

io.sockets.on('connection', function(socket){
  console.log('connected: %s', socket.id);
  ...
}

使用 xhr-polling 和 10 秒的轮询持续时间,这是否意味着每 10 秒将调用一个新连接?如果是这样,如果他们不断断开连接,我如何跟踪用户?我在 heroku 上运行 node.js。

最佳答案

xhr-polling 意味着您的服务器将等待 10 秒收到任何 POST 的 GET,它在回答之前没有答案,而不是发回空响应。因此,如果您的服务器在 10 秒后没有信息可返回,它将以空响应返回。 你可以在这里阅读更多:Long polling

我个人在 nodejitsu(另一个 Node 托管,如 Heroku)上的应用程序中使用 xhr-polling 作为 WebSockets 的后备选项,它工作正常。唯一的问题是“连接时”事件大约需要 3-8 秒,而不是像我的 WebSocket 应用程序那样即时。

每次新轮询时都不会创建新连接,这只是每 10 秒只向服务器发送一个 GET 或 POST 的方式,而不是每 0.5 秒轮询一次服务器以获得“实时”应用。如果服务器在不到 10 秒内回答,将发送另一个轮询以准备下一个回答。

我希望这会对你有所帮助。 祝你有美好的一天。

关于node.js - socket.io 中的 "xhr-polling"配置有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9244225/

相关文章:

node.js - Socket.io 无法在带有 Nodejs 的 aws 上工作

javascript - 如何在 NodeJS/Javascript 中进行长轮询?

javascript - Android 上的 Chrome : connection become dead after 30 minutes

node.js - 为什么卷中的供应商/Node 模块映射被认为是不好的做法?

node.js - 带有 React 和 Express 的套接字 IO。 ReactJS 错误 : Could not proxy request/socket. io/?EIO=4..... 来自本地主机 :3000 to http://127. 0.0.1:4000

Node.js,表达可变权重

node.js - 在 feathersjs 中将 socket.io 逻辑与 app.js 分开

ruby-on-rails - Rails 和 ruby​​ 客户端之间的长轮询/推送事件

javascript - 如何使用nodeJS和Puppeteer解决 "Target closed"错误?

javascript - 在 node.js 中解析查询字符串