Server.js
个文件:node server
Server.js
文件会创建class A
Class A
创建class B
(Web套接字)和C(REST API)的新实例class B
然后整个NodeJS
应用中关闭/断开了网络套接字连接。只是停止/关闭。即使我试图再次“开始整个过程”...尝试在近距离事件中放置不同的代码 - 例如:关闭事件被调用 - 但无论如何 - 我尝试“重新启动”我的应用程序的内容和方式。它不会执行我的代码 - 它只是关闭。
我喜欢理解为什么以及正在发生什么,而不仅仅是重新启动整个应用程序 - 永远使用NPM ......
更新:
很抱歉没有让自己清楚。但实际上你正在寻找的细节是我的要点。 4 ...字面上没有 - 我没有再次执行整个节点应用程序...这就是为什么我使用“”(引号)...正如我所描述的那样我尝试再次启动该过程。('关闭')事件处理程序...我可以调试并查看代码何时到达事件处理程序中的点...但它不能再次执行/调用A.start()函数或通过激活事件...所以关于范围,实例,功能等的一些事情我正确地做不正确 - 这就是为什么我试图描述应用程序,类,功能......现在 - 我希望它更清楚我的意思: - )
更新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 :(得分:1)
只要有活动元素仍然可以接收事件,节点应用程序就会保持活动状态。这可以包括TCP连接,监听服务器,计时器等......
只要这些都不存在且事件队列为空并且控制流返回系统(例如没有JS正在执行),那么节点应用程序将自行关闭。我们的想法是,如果没有任何东西可以在未来创建更多的事件,那么在这个节点应用程序中就没有其他任何事情可以发生,所以必须这样做。
如果您说当您尝试再次运行应用时,它将不再启动,那么这是一个不同的问题。您将需要记录错误和调试以找出可能的原因。如果您只是记录每个可能的位置,您可能会在应用启动代码中出现错误,您可能会发现错误的位置使其无法启动。既然你没有提供我们可以继续知道可能阻止这个问题的细节,我可以列举一些常见的东西:
某些进程仍在运行,可以控制某些资源(例如端口),当您尝试重新启动应用程序时,它会在无法访问该资源时关闭。
某些进程仍在运行,并且具有打开的文件资源,限制了您访问这些文件的能力。
首先,我会检查您的操作系统进程管理器,以验证您的原始应用程序实例是否仍在运行。您描述的症状使其听起来可能仍在运行并保留一些资源,使您的应用无法再次运行。
当你的婚礼套接字关闭时,当你说“再次开始整个过程”时,这部分让我感到困惑。你真的试图在你的应用程序中再次执行node server.js
吗?或者,你到底想要做什么?我们可能需要看到该代码来帮助您完成该特定操作。仅供参考,在关闭后重新建立webSocket连接应该没什么大不了的。您不必为了这样做而重新启动整个应用程序。