Für serverseitige Inhalte haben Sie mehrere Optionen. Die erste besteht darin, alle Ihre Kollisionen vollständig zu extrapolieren, wobei davon ausgegangen wird, dass Sie häufig genug Nachrichten von Clients erhalten, und alle wichtigen Statusänderungen über den Server zu kommunizieren, der dann nur dann eine Validierung für Spielereignisse ausführt, wenn E / A-Rückrufe von der empfangen werden Client-Verbindungen.
Die zweite Möglichkeit, die Sie zu bevorzugen scheinen, besteht darin, eine eigene Schleife auszuführen, während Sie E / A-Rückrufe verarbeiten. Obwohl setInterval und setTimeout dies erreichen, verfügen Sie über eine viel feinere Reihe von Tools, um dies zu steuern: setImmediate(callbacks, [[arg], ...])
und process.nextTick(callback)
.
Process.nextTick führt Ihren Rückruf vor anderen E / A- Ereignissen aus, solange Sie keinen rekursiv unendlichen Stapel von Rückrufen gestapelt haben (wenn er eine bestimmte Anzahl überschreitet, process.maxTickDepth, gibt er den E / A-Rückrufen nach).
SetImmediateCallback ähnelt process.nextTick dahingehend , dass es jeden Tick ausführt, aber nur einer der Rückrufe in der Warteschlange bei jedem Tick ausgeführt wird und nicht alle Rückrufe in der Warteschlange.
Die Verwendung dieser Elemente ähnelt setTimeout oder requestAnimationFrame.
function gameLoop() {
updateCollisions();
process.nextTick(gameLoop);
}
process.nextTick(gameLoop);
Dies hat den Vorteil, dass Sie nicht von der Implementierung von setTimeout und setInterval in V8 abhängig sind. Dies ist eher eine direkte Verbindung zur Ereignisschleife des Knotens. Stellen Sie nur sicher, dass Sie die E / A nicht verhungern lassen, wenn Sie process.nextTick verwenden. updateCollisions sollte garantiert nicht so lange dauern.