2017-02-17 54 views
0
  1. 我有一个Server.js文件我从CMD推出:node server
  2. Server.js文件创建的class A
  3. Class A一个新的实例创建class B(网络接口)的一个新实例,C(REST API)
  4. 如果网络套接字连接关闭/断开在class B然后整个NodeJS应用。只是停止/关闭。即使我试图再次“开始整个过程​​”...通过尝试在密切事件中放置不同代码 - 例如:

关闭事件被称为 - 但不管 - 我尝试了什么以及如何以“重新启动”我的应用程序。它不执行我的代码 - 它只是关闭。我的NodeJS应用程序。关闭

我想明白为什么和正在发生的事情,而不仅仅是重新启动整个应用程序 - 由永等使用NPM ...

UPDATE:

对不起,我不会让自己不够清晰。但实际上你要找的细节是我的第一点。 4 ...从字面上不 - 我不再执行整个节点应用程序...这就是为什么我使用“”(引号)......正如我描述的,我尝试再次启动该过程。 ')事件处理程序...我可以调试并查看代码何时到达事件处理程序中的位置......但它无法再次执行/调用A.start()函数或通过触发事件...所以它的一些事情范围,实例,功能等我正确地做不正确 - 这就是为什么我试图描述应用程序,类,功能...现在 - 我希望它更清楚我的意思:-)

UPDATE 2:

Server.js

var dlManager = new DownloadManager(); 
dlManager.initDownload('BTC-USD'); 

下载manager.js

function DownloadManager() { 
    this.initDownload = function(productList) { 

     var wl = new WinLog(); 
     var restClient = new RestApiClient(); 
     var webSocketClient = new WsClient(); 
     wl.info('Running...'); 

     try { 

      // Removed a lot of not relevant code from here... 

      function startWS(productList) { 

       // 2. Make the WS begin to queuing all the newest trading data... 
       webSocketClient.initws(productList); 
      } 
     } catch (err) { 
      wl.info('initDownload: ' + err); 
     } 
    } 
} 

function create() { 
    return new DownloadManager(); 
} 

module.exports = create; 

Wsclient.js

function WsClient() { 

    this.initws = function(productList) { 

     var wl = new WinLog(); 

     try { 
      var firstTime = true; 
      var WebSocketEmit = new WSemitter(); 
      var activeQueue = []; 
      var insertToDB = []; 
      var cursorId = 0; 
      var websocket = new Gdax.WebsocketClient(productList); 

      websocket.on('message', function(data) { 

       // Removed a lot of not relevant code from here... 

      }); 

      websocket.on('close', function close() { 

       wl.info('Disconnected'); 

       //WebSocketEmit.connectionClosed(productList); 
       // Starts from the beginning once again ;-) 
       var new_dlManager = new DownloadManager(); 
       new_dlManager.initDownload(productList); 
      }); 


     } catch (err) { 
      wl.error('initws: ' + err); 
     } 
    } 

    this.SetHistoricalDataOK = function(value) { 
     HistoricalDataOK = value; 
    } 
} 

function create() { 
    return new WsClient(); 
} 

module.exports = create; 
+0

您的问题不够具体;没有看到任何代码,有太多的可能性来猜测可能会发生什么。 – Claies

+0

应该再次创建这个问题吗?由于它仍然“保持” - 为什么我更新后没有任何机构回答? – PabloDK

回答

1

因为还是有很多可以接收事件有源元件的电节点的应用程序将留只要活着。这可以包括一个TCP连接,侦听服务器,定时器等..

只要那些没有任何更多的存在和事件队列为空,并且控制返回到系统的回流(例如,没有JS正在执行),那么节点应用程序将自行关闭。我们的想法是,如果没有任何事情可以在将来创建更多事件,那么在此节点应用程序中就没有其他事情可以发生,因此必须完成。

如果您是说,当你尝试再次运行你的应用程序,它不会启动任何更多的,那么这是一个不同的问题。您需要记录一些错误并进行调试以找出可能的原因。如果您只记录了每个可能的位置,则可能会在您的应用启动代码中出现错误,您可能会发现错误在哪里,从而避免启动。既然你没有提供细节,我们可以去知道问题可能阻止这一点,我可以列出一些常见的事情:

  1. 一些进程仍在运行,有一些资源的控制(如端口),当您尝试重新启动应用程序时,它会在无法访问该资源时关闭。

  2. 某些进程仍在运行,并具有打开的文件资源,限制了您访问这些文件的能力。

首先,我会检查您的OS进程管理器,以验证您的原始应用程序实例是否仍在运行。您所描述的症状听起来像是它可能仍然在运行并持有一些资源,以防止您的应用程序再次运行。


这部分有我困惑,当你说“重新开始整个过程​​”当你结婚插座关闭。你是否真的试图从你的应用程序再次执行node server.js?或者,你究竟想在那里做什么?我们可能需要查看该代码以帮助您完成特定操作。仅供参考,关闭后重新建立webSocket连接应该没什么大不了的。你不应该重新启动你的整个应用程序来做到这一点。

+0

抱歉没有让自己清楚。但实际上你要找的细节是我的第一点。 4 ...从字面上不 - 我不再执行整个节点应用程序...这就是为什么我使用“”(引号)......正如我描述的,我尝试再次启动该过程。 ')事件处理程序...我可以调试并查看代码何时到达事件处理程序中的位置......但它无法再次执行/调用A.start()函数或通过触发事件...所以它的一些关于范围,实例,功能等等,我正确地不做正确的 - 这就是为什么我试图描述的应用程序,类,功能 – PabloDK

+0

@PabloDK - 好吧,你说你的代码不起作用,当你再次调用它。如果您向我们展示实际的代码不起作用,并且可能共享您自己的故障排除,错误日志记录和一般诊断的结果,那么只有当您尝试再次执行该代码时,我们才能为您提供帮助。 – jfriend00

+0

我现在添加了我的代码的修剪版本...看看“new_dlManager.initDownload(productList);”在wsclient.js文件中,应该再次启动每一件事 - 当连接关闭时...但是没有任何反应......而应用程序只是简单地击落...没有其他故障或异常。 – PabloDK