Apa cara terbaik untuk mengatur waktu di Node.js?

Manakah cara terbaik untuk mengatur waktu dan kejadian real-time?

Saya mengimplementasikan game RPG multipemain kecil dengan Node.js. Saya memiliki banyak NPC dan masing-masing bergerak setiap 3 atau 4 detik, jadi saya perlu memperbaruinya.

Solusi A: gunakan satu setTimeout per NPC. jika saya memiliki ratusan NPC, saya akan membuatnya sebagai pengatur waktu. Memang lebih sederhana tapi bukankah kurang efisien?

Solusi B: gunakan satu setTimeout untuk semua NPC. Setiap kali, kami memanggil batas waktu berikutnya dengan menghitung sisa waktu terkecil sebelum NPC bergerak. Jadi kita harus menggunakan kode yang lebih kompleks, tapi kita hanya punya satu setTimeout.

Apakah itu cara yang lebih baik/lainnya?


person BAK    schedule 09.10.2012    source sumber
comment
Saya tidak menyukai terminologi RPG. Bisakah Anda menjelaskan apa yang dimaksud dengan PNJ?   -  person Werner Kvalem Vesterås    schedule 09.10.2012
comment
Saya menggunakan kata Perancis untuk NPC (Karakter Non-Pemain). Maaf tentang itu, itu sudah diedit.   -  person BAK    schedule 09.10.2012
comment
Mungkin [pertanyaan/jawaban] [1] ini dapat memberikan sedikit pencerahan mengenai masalah ini. [1]: stackoverflow.com/questions/ 12168708/   -  person Werner Kvalem Vesterås    schedule 09.10.2012
comment
@WernerVesterÃ¥s, dengan kata lain, setTimeout() murah.   -  person nalply    schedule 09.10.2012
comment
itu menjawab pertanyaan saya, terima kasih   -  person BAK    schedule 11.10.2012


Jawaban (1)


Seperti pertanyaan terkait, setTimeout itu murah. Namun, ini tidak gratis.

Anda dapat menggunakan satu setTimeout dengan cara yang mirip dengan cara kerja memcached. Ini memiliki satu array besar. Setiap detik, ia memeriksa item pertama (atau terakhir) dari array ini, dan melihat apakah ada sesuatu yang perlu dilakukan. Jika ada, ia akan melakukannya. Kemudian, ia menghapus item tersebut. Bilas dan ulangi.

Inilah ide dasar di balik penerapannya. Anda mungkin mendapatkan performa yang lebih baik dengan memikirkan keranjang kosong atau hal-hal seperti ini, namun penerapan sederhana seharusnya sudah cukup berperforma.

person Florian Margaine    schedule 16.10.2012