Как лучше всего управлять временем в Node.js?

Как лучше всего управлять временем и событиями в реальном времени?

Я реализую небольшую многопользовательскую ролевую игру с Node.js. У меня много NPC, и каждый движется каждые 3 или 4 секунды, поэтому мне нужно их обновить.

Решение А: используйте по одному setTimeout на каждого NPC. если у меня есть сотни NPC, я создам таймеры. Это проще, но не менее эффективно?

Решение B: используйте один setTimeout для всех NPC. Каждый раз мы вызываем следующий тайм-аут, вычисляя наименьшее оставшееся время до движения NPC. Таким образом, мы должны использовать более сложный код, но у нас есть только один setTimeout.

Есть ли лучший/другой путь?


person BAK    schedule 09.10.2012    source источник
comment
Я не разбираюсь в терминологии RPG. Не могли бы вы объяснить, что означает PNJ?   -  person Werner Kvalem Vesterås    schedule 09.10.2012
comment
Я использовал французское слово для NPC (неигровой персонаж). Извините за это, это отредактировано.   -  person BAK    schedule 09.10.2012
comment
Может быть, этот [вопрос/ответ][1] прольёт свет на эту тему. [1]: stackoverflow.com/questions/ 12168708/   -  person Werner Kvalem Vesterås    schedule 09.10.2012
comment
@WernerVesterås, другими словами, setTimeout() дешево.   -  person nalply    schedule 09.10.2012
comment
это ответ на мой вопрос, спасибо   -  person BAK    schedule 11.10.2012


Ответы (1)


Как говорится в соответствующем вопросе, setTimeout дешево. Однако это не бесплатно.

Вы можете использовать один setTimeout так же, как работает memcached. Он имеет один большой массив. Каждую секунду он проверяет первый элемент (или последний) этого массива и смотрит, не нужно ли что-то сделать. Если есть, то делает. Затем он удаляет элемент. Промыть и повторить.

Это основная идея реализации. Вы можете улучшить производительность, если будете думать о пустых корзинах или подобных вещах, но простая реализация уже должна быть достаточно производительной.

person Florian Margaine    schedule 16.10.2012