Einfachstes NodeJS
const http = require('http');
const server = http.createServer((req, res) => {
SomeVeryLongAction(res);
});
server.on('clientError', (err, socket) => {
socket.end('HTTP/1.1 400 Bad Request\r\n\r\n');
});
server.listen(8000);
// the long running task - simplified to setTimeout here
// but can be async, wait from websocket service - whatever really
function SomeVeryLongAction(response) {
setTimeout(response.end, 10000);
}
Ein produktionsbezogenes Szenario in Express würde z. B. Folgendes ergeben response
in der Middleware. Tun Sie, was Sie tun müssen, können alle der langen abgefragten Methoden zu Map oder etwas (das sichtbar für andere Flows ist), und rufen Sie <Response> response.end()
wann immer Sie bereit sind. Es gibt nichts Besonderes an langen abgefragten Verbindungen. Der Rest ist einfach so, wie Sie Ihre Anwendung normalerweise strukturieren.
Wenn Sie nicht wissen, was ich mit "scoping out" meine, sollte Ihnen dies eine Idee geben
const http = require('http');
var responsesArray = [];
const server = http.createServer((req, res) => {
// not dealing with connection
// put it on stack (array in this case)
responsesArray.push(res);
// end this is where normal api flow ends
});
server.on('clientError', (err, socket) => {
socket.end('HTTP/1.1 400 Bad Request\r\n\r\n');
});
// and eventually when we are ready to resolve
// that if is there just to ensure you actually
// called endpoint before the timeout kicks in
function SomeVeryLongAction() {
if ( responsesArray.length ) {
let localResponse = responsesArray.shift();
localResponse.end();
}
}
// simulate some action out of endpoint flow
setTimeout(SomeVeryLongAction, 10000);
server.listen(8000);
Wie Sie sehen, könnten Sie wirklich auf alle Verbindungen reagieren, eine, tun, was Sie wollen. Es gibt id
für jede Anfrage, so dass Sie in der Lage sein sollten, die Karte zu verwenden und den Zugriff auf spezifische aus api Aufruf.