Instead of the Node process exiting instantly on file change, send a signal to .NET that it should restart. This is working towards the connection-draining feature.

This commit is contained in:
SteveSandersonMS
2016-07-07 12:01:28 +01:00
parent a19e37f3c0
commit 26e8bd823c
4 changed files with 21 additions and 3 deletions

View File

@@ -184,7 +184,10 @@
var ext = path.extname(filename);
if (extensions.indexOf(ext) >= 0) {
console.log('Restarting due to file change: ' + filename);
process.exit(0);
// Temporarily, the file-watching logic is in Node, so we signal it's time to restart by
// sending the following message back to .NET. Soon the file-watching logic will move over
// to the .NET side, and this whole file can be removed.
console.log('[Microsoft.AspNetCore.NodeServices:Restart]');
}
});
}

View File

@@ -95,7 +95,10 @@
var ext = path.extname(filename);
if (extensions.indexOf(ext) >= 0) {
console.log('Restarting due to file change: ' + filename);
process.exit(0);
// Temporarily, the file-watching logic is in Node, so we signal it's time to restart by
// sending the following message back to .NET. Soon the file-watching logic will move over
// to the .NET side, and this whole file can be removed.
console.log('[Microsoft.AspNetCore.NodeServices:Restart]');
}
});
}

View File

@@ -18,6 +18,7 @@ namespace Microsoft.AspNetCore.NodeServices.HostingModels
public abstract class OutOfProcessNodeInstance : INodeInstance
{
private const string ConnectionEstablishedMessage = "[Microsoft.AspNetCore.NodeServices:Listening]";
private const string NeedsRestartMessage = "[Microsoft.AspNetCore.NodeServices:Restart]";
private readonly TaskCompletionSource<object> _connectionIsReadySource = new TaskCompletionSource<object>();
private bool _disposed;
private readonly StringAsTempFile _entryPointScript;
@@ -128,6 +129,13 @@ namespace Microsoft.AspNetCore.NodeServices.HostingModels
_connectionIsReadySource.SetResult(null);
initializationIsCompleted = true;
}
else if (evt.Data == NeedsRestartMessage)
{
// Temporarily, the file-watching logic is in Node, so look out for the
// signal that we need to restart. This can be removed once the file-watching
// logic is moved over to the .NET side.
Dispose();
}
else if (evt.Data != null)
{
OnOutputDataReceived(evt.Data);

View File

@@ -8,7 +8,11 @@ export function autoQuitOnFileChange(rootDir: string, extensions: string[]) {
var ext = path.extname(filename);
if (extensions.indexOf(ext) >= 0) {
console.log('Restarting due to file change: ' + filename);
process.exit(0);
// Temporarily, the file-watching logic is in Node, so we signal it's time to restart by
// sending the following message back to .NET. Soon the file-watching logic will move over
// to the .NET side, and this whole file can be removed.
console.log('[Microsoft.AspNetCore.NodeServices:Restart]');
}
});
}