使用sockets.io发出https(api)请求时网站崩溃

时间:2017-02-22 13:50:51

标签: javascript http https socket.io

我们在尝试制作的网站上遇到了一些困难。该网站有一个Javascript前端和后端。后端使用socket.io通过渠道处理https请求。一切正常,但是当我们加载测试时,它会非常慢。在我们将它与5种不同的设备一起使用之前,该网站崩溃了。最终它显示了econn重置(请参阅下面的错误处理程序)。

    //Doesn't stop server after crashing
process.on('uncaughtException', function (err) {
	console.error(err.stack);
	console.log("Node NOT Exiting...");
	var datetime = new Date();
	fs.appendFile('log.txt', "\n\r"+datetime+"\n\r"+err.stack, function (err) {
    });
});

我们还有一些错误处理代码,但此代码会自动启动服务器的所有用户,导致不显示任何结果。对于实际上与服务器断开连接的用户(因此并非所有其他用户),我们希望这只会出现。

请参阅我们的https请求代码:

   return new Promise(function(resolve,reject) 
    {
        var options = {
          host: hostUrl,
          port: 443,
          path: path,
          method: method,
          dataType: "json",
          headers: {
            accept: '*/*'
          }
        };

        var req = https.request(options, function(res) {
              var result = '';

              res.on('data', function(chunk){
                    result += chunk;
              });

              res.on('end', function(){
                    //Only send result back when its in json format
                    if(!result || result.indexOf('application/json') !== 0)
                    {
                        // preserve newlines, etc - use valid JSON
                        result = result.replace(/\\n/g, "\\n")  
                                       .replace(/\\'/g, "\\'")
                                       .replace(/\\"/g, '\\"')
                                       .replace(/\\&/g, "\\&")
                                       .replace(/\\r/g, "\\r")
                                       .replace(/\\t/g, "\\t")
                                       .replace(/\\b/g, "\\b")
                                       .replace(/\\f/g, "\\f");
                        // remove non-printable and other non-valid JSON chars
                        result = result.replace(/[\u0000-\u0019]+/g,""); 
                        
                        resolve(exstractDataForNewTemplate(JSON.parse(result)); //Make sure the results fit in the same JSON with the addToTemplate function!
                    }
                    else
                    {
                        reject(null);
                    }
              });
        });
        req.end();

        req.on('error', function(e) {
          console.error(e);
          reject(null);
        });
    });

我们想知道如何通过改进现有的https请求或使用https请求替代方案来解决此问题。欢迎提出建议。

0 个答案:

没有答案