Articles of 长轮询

跨浏览器COMET实现node.js

我是一个node.js启动器。 我想要交付的产品看起来像是一次有1000多名参与者在线聊天。 我正在寻找一个跨浏览器演示(IE7,Android支持)开始。 我担心的是客户端跨浏览器部分。 我梦想一个使用web套接字的支持浏览器和iframe的库不被支持,经过很好的testing,并且封装了COMET的实现。 我在网上find了一些解决scheme,但是我对你的build议很生气。 谢谢

iframe中的彗星服务器数据是否正在积累?

我使用分块数据将[dos] something()[/ script]标签推入到我的慧星服务器的iframe中,但是脚本标签只能持续积累。 如何在每个脚本标签之后擦除它?

nodejs推送订阅redis的通知

对于login用户只,我想以某种方式通知他们,如果他们有任何例如新的通知。 例如,假如一个成员给他们发送了一条私人消息,我想告诉用户他们有一条新消息要查看(假设他们没有刷新页面)。 使用Nodejs和Redis,我将如何去做这件事? 注意:我只需要nodejs发送一个小的json给用户说他们有一个新的消息。 工作stream程如下,我在想: 1. user is logged in, a new message is sent to them. 2. somehow using nodejs and redis and long-polling, nodejs communicates back to the logged in users browser they have a pending message. 3. when nodejs sends this push notification, I then call another javascript function that will call […]

NodeJS CouchDB长轮询崩溃

当然,我有一个通过NodeJS上的ExpressJS发布的web应用程序。 它使用CouchDB作为数据源。 我实现了长轮询以保持应用程序在所有用户之间始终保持同步。 要做到这一点,我使用以下逻辑: 用户login到应用程序,并通过Express路线向Node发起初始的长轮询请求。 节点轮stream向CouchDB发出长轮询请求。 当Couch更新时,它响应来自Node的请求。 最后Node响应浏览器。 简单。 但是,发生的事情是,当我刷新浏览器时, 每五次刷新就会冻结一次 。 咦? 非常奇怪。 但是,即使在我的testing环境中,我也可以一遍又一遍地重现它。 每五次刷新一次,冻结Node并导致应用程序冻结。 重启节点解决了这个问题。 拉了很多头发后,我想通过改变这个问题来解决它: app.get('/_changes/:since*', security, routes.changes); 对此: app.get('/_changes/:since*', security, function () { routes.changes }); 然而,经过进一步的testing,这只是没有运行routes.changes。 所以没有实际解决scheme 任何想法为什么长期投票CouchDb从Node会做这样一个奇怪的事情? 在第五次刷新,我可以在我的路由代码的第一行节点中有一个断点,它永远不会被击中。 但是,在浏览器中,我可以断开对长时间轮询的节点的请求,并且它似乎熄灭。 这就像Node由于某种原因不接受连接 我应该以不同的方式接近从Node到CouchDB的长轮询吗? 我正在使用feed = longpoll,我应该做feed还是连续的? 如果我将couchdb中的changes_timeout调低到5秒,它就不能解决问题,但是它可以更容易地处理,因为冻结只会持续5秒钟。 所以这似乎表明节点不能处理有几个待处理的请求。 也许我会尝试一个连续的饲料,看看会发生什么。 self.getChanges = function(since){ 浏览器: $.ajax({ url: "/_changes/" + since, type: "GET", dataType: "json", […]

推送iOS和Android Interval Poll方法的通知服务器后端

我正在为iOS和Android编写一个NodeJS推送通知服务器。 目前,一旦我获得设备令牌,我将它们保存在本地MongoDB数据库中,然后在发生更改时触发通知。 问题是,“更改”(信息添加)发生的数据库不是我自己的。 这是第三方的服务器。 所以我知道服务器的变化是通过使用第三方提供的API。 我目前的解决scheme是使用setTimeout每隔X分钟发出一个请求来检查更改,然后基于此发出通知。 缩短的时间间隔是10分钟,最长的时间是1小时。 我基于时间dynamic地改变时间间隔。 我的问题是(是), 1.) setTimeout方法是否是解决这个问题的最好方法? 如果不是我还能使用什么? 2.)有什么办法可以在这种情况下实现Web Sockets ? 3.)如果setTimeout是唯一的select,我应该遇到什么样的问题? 这是什么目前的function看起来像 function start_notifications_server_driver() { if(current_user_info.num_sent <= current_user_info.frequency){ //I removed the interval object on here because it's quite large and would take up space here for(var i = 0; i < intervals.length; i++){ if(check_if_time_between(intervals[i])){ if(dev_mode) console.log("Returned true for", intervals[i]); temp_interval […]

socket.io – polling-xhr.js:264 GET错误

我一直在我的本地主机上的聊天应用程序(这工作正常),但是当我试图承载它在Github或000webhost上 ,我得到这个错误polling-xhr.js:264在两个主机(两个主机有一个https连接)。 我正在使用cfenv来parsingCloud Foundry提供的环境variables。 以下是有关错误的图片: 它会继续这样下去… 这是看我的代码: server.js var cfenv = require('cfenv'); var appEnv = cfenv.getAppEnv(); var express = require('express'); var app = require('express')(); var server = require('http').Server(app); var io = require('socket.io')(server); server.listen(appEnv.port, appEnv.bind, function(){ console.log("Server starting on " + appEnv.url); }) app.use(express.static(__dirname + '/')); … // rest of socket.io code 的index.html … <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script> […]

request.close事件在node.js服务器中不会​​触发

我正在使用node.js作为服务器的长轮询应用程序。 具体的任务是立即学习,然后用户下线。 所以,我必须听取request.close事件,对吗? 我从如何检查连接是否在node.js服务器中被中止复制下面的一段代码 var http = require("http"), util = require("util"); var httpServer = http.createServer(function(req, res) { util.log("new request…"); // notify me when client connection is lost req.on("close", function(err) { util.log("request closed…"); }); // wait with response for 15 seconds setTimeout(function() { res.writeHead(200, {'Content-Type': 'text/plain'}); res.write("response"); res.end(); util.log("response sent…"); }, 15000); }); httpServer.listen(8888, "127.0.0.1"); util.log("Running […]

socket.io服务器在注册客户端断开连接时出现延迟

我有一个socket.io连接使用xhr作为唯一的传输。 当我在浏览器中加载应用程序(以chrome和ff进行testing)时,套接字连接,一切正常,直到我离开页面。 如果我重新加载浏览器,我可以看到客户端发送'disconnect'事件,但服务器断开连接事件在很长一段时间内不会触发(假设客户端心跳超时)。 这是一个问题,因为我在客户端断开连接时在服务器上做了一些清理工作。 如果客户端重新加载,我会在断开连接之前获得多个连接事件。 我已经尝试在窗口的'beforeunload'事件中手动发送客户端的断开连接消息,但无济于事。 有任何想法吗? 我debugging了socket.io服务器,并且我可以确认Manager.prototype.onClientDisconnect只是因为“closures超时”原因而被触发。

长时间轮询从浏览器中获取超时

我试图使用node.js服务60秒的长轮询请求。 我面临的问题是,浏览器正在超时。 相同的设置工作30秒。 有人可以build议如何实现这一目标吗? 使用JQuery作为JS框架。 谢谢…

Node.js与Socket.io – 长轮询失败,并抛出“代码”:1,“消息”:“会话ID未知”响应

我坚持为什么被移动到IIS7服务器的nod​​e.js应用程序现在失败。 我知道IIS7不支持Web套接字,但我的理解是,如果Web套接字不可用,socket.io将回退到长轮询。 所以现在,当用户试图按下通常需要套接字或长轮询的特定button时,我会得到如下所示的内容: XHR finished loading: POST "https://localhost:817/socket.io/?EIO=2&transport=polling&t=1433777964357-6&sid=QWsESi0c9ih7WMWKAAAC". GET https://localhost:817/socket.io/?EIO=2&transport=polling&t=1433777963494-5&sid=QWsESi0c9ih7WMWKAAAC 400 (Bad Request) XHR finished loading: GET "https://localhost:817/socket.io/?EIO=2&transport=polling&t=1433777963494-5&sid=QWsESi0c9ih7WMWKAAAC". OPTIONS https://localhost:817/socket.io/?EIO=2&transport=polling&t=1433777965127-7&sid=QWsESi0c9ih7WMWKAAAC XMLHttpRequest cannot load https://localhost:817/socket.io/?EIO=2&transport=polling&t=1433777965127-7&sid=QWsESi0c9ih7WMWKAAAC. Invalid HTTP status code 400 当我单击GET或XMLHttpRequest时,我可以看到响应是"code":1,"message":"Session ID unknown" ,我不明白,因为我可以看到SID。 当我点击列出的失败选项的代码时,我发现问题来自Request.prototype.create,即xhr send: xhr.send(this.data); 有没有人有任何想法可能会导致这些事情? 任何澄清将不胜感激! 非常感谢!