节点JS花费很长时间发送初始数据

我正面临NodeJS的一个问题。 最初,我需要很长时间4-5秒才能得到任何更新。 节点的JS服务器是公开访问,它不是通过任何代理或任何补丁。 但一旦初始连接build立 – 更新即时。

我深入使用Chrome的networking工具 – 它说它正在等待数据。 看到附加的图像

我也粘贴我的app.js(节点应用程序)的代码供您参考。

var http = require('http'), url = require('url'), fs = require('fs'), amqp = require('amqp'), sys = require(process.binding('natives').util ? 'util' : 'sys'); var exchangeName = 'conferenceTest'; send404 = function (res) { res.writeHead(404); res.write('404'); res.end(); }; server = http.createServer(function (req, res) { var path = url.parse(req.url).pathname; switch (path) { case '/': fs.readFile(__dirname + "/index.html", function (err, data) { if (err) { return send404(res); } else { res.writeHead(200, { 'Content-Type': 'application/zip', 'Connection': 'close', 'content-encoding': 'gzip' }); res.write(data, 'utf8'); res.end(); } }); break; } }); // listen to the http server for socket connections var io = require('socket.io').listen(server); var connection = amqp.createConnection({ host: 'localhost' }); connection.on('ready', function () { var exchange = connection.exchange(exchangeName, { // create exchange type: 'direct', durable: true }); io.sockets.on('connection', function (client) { console.log("client connected"); client.on('changeview', function (data) { var queue = connection.queue(data.queueName, { //create queue durable: true, autoDelete: false }); var plaintext = "Put any kind of meat on a stick and roast it over a flame and it immediately becomes food fit for gods. No country understands this sacred rule of seared meat like Turkey.Turkish kebabs are the incarnation of the meat lovers most exotic fantasies, with grilled lamb, beef and chicken as skewer MVPs.Most kebab restaurants also have a long list of Turkish starters called meze that are as delicious as the main dishes.Turkeys best alcoholic complement for all that meat is raki -- an aniseed-flavored drink that s often diluted with water and chilled with ice. Frothy, yogurt-based ayran is a great non-alcoholic complement to heavy dishes. But who are we kidding -- you just want the meat. Heres where to get it in Turkey."; io.sockets.emit('changeview', plaintext); }); }); }); process.on('uncaughtException', function (err) { console.log('Uncaught Exception: ' + err.message); }); server.listen(18080); 

谢谢

在这里输入图像说明

你的客户端正在请求一些长的数字URI,但是你的处理程序只接受/ (为它发回index.html )的请求。 其他请求(如数字URI)根本就没有处理,这意味着您的浏览器将等待一段时间,最终放弃。

要解决,请添加一个默认情况并返回一个404错误:

 switch (path) { case '/': // your current code break; default: send404(res); } 

另外:为什么你要在index.html文件的响应中设置这些特定的头文件? application/zip将意味着您的index.html应该被视为一个ZIP文件,并将内容编码设置为gzip将意味着回应gzip'ed。 这两者似乎都不是这种情况。

客户端 – 默认连接超时是10秒

我已经把它缩短到了500毫秒 – 现在在2.92秒内连接起来 – 以前需要12.3秒

 var conn = io.connect("http://myserver.com:myport/", { transports: transports, 'reconnect': true, 'connect timeout':500}); 

希望它能帮助任何人解决这个问题