Đối với công cụ phía máy chủ, bạn có một vài tùy chọn. Đầu tiên là ngoại suy hoàn toàn tất cả các va chạm của bạn khi giả định rằng bạn sẽ có các tin nhắn thường xuyên từ khách hàng, truyền đạt tất cả các thay đổi trạng thái có ý nghĩa thông qua máy chủ, sau đó sẽ chạy xác thực trên các sự kiện trò chơi khi nó nhận được các cuộc gọi lại IO từ kết nối khách hàng.
Cách thứ hai, mà bạn có vẻ thích hơn, là chạy vòng lặp của riêng bạn trong khi bạn xử lý các cuộc gọi lại IO. Mặc dù setInterval và setTimeout sẽ thực hiện điều này, nhưng bạn có một bộ công cụ chi tiết hơn nhiều để kiểm soát điều này: setImmediate(callbacks, [[arg], ...])
và process.nextTick(callback)
.
Process.nextTick sẽ chạy cuộc gọi lại của bạn trước các sự kiện IO khác, miễn là bạn chưa xếp chồng một ngăn gọi vô hạn đệ quy (nếu vượt quá một số nhất định, process.maxTickDepth, thì nó sẽ mang lại các cuộc gọi lại IO).
SetImmediateCallback tương tự như process.nextTick ở chỗ nó hoạt động mọi tick, nhưng chỉ một trong số các cuộc gọi lại được xếp hàng được thực thi trên mỗi tick, thay vì tất cả các cuộc gọi lại được xếp hàng.
Sử dụng chúng sẽ trông tương tự như setTimeout hoặc requestAnimationFrame.
function gameLoop() {
updateCollisions();
process.nextTick(gameLoop);
}
process.nextTick(gameLoop);
Ưu điểm của những điều này là bạn không phụ thuộc vào việc triển khai setTimeout và setInterval của V8. Đây là nhiều hơn một dòng trực tiếp đến vòng lặp sự kiện của Node. Chỉ cần chắc chắn rằng bạn không bỏ đói IO nếu bạn đang sử dụng process.nextTick. updateCollutions nên được đảm bảo để không mất nhiều thời gian.