Управление сокетами в многопользовательской игре Socket.io - PullRequest
3 голосов
/ 29 марта 2012

Я создаю многопользовательскую игру с Node.js и Socket.io.Все игроки будут перемещаться по одной и той же бесконечной карте (подумайте о Minecraft).Когда игрок движется, я загружаю плитки, которые им видны.Когда игроки двигаются, их движения должны быть отправлены всем игрокам, которые их видят.

Мой вопрос;как я должен идти о структурировании моих сокетов?Кажется, что одна розетка для всех игроков не будет масштабироваться.Я мог бы разделить мир на куски, но я не уверен, как управлять границами кусков.Поскольку большинство игроков не смогут видеть друг друга большую часть времени, я бы предпочел, чтобы сокеты каждого игрока получали только обновления, которые имеют к ним отношение.

Я читал, что в Socket.io есть концепцияиз «комнат», которые являются просто сокеты, которые получают те же сообщения.Было бы возможно иметь отдельную комнату для каждого подключенного игрока, к которой я бы добавил гнездо любого другого игрока, который перемещается поблизости?Затем каждый раз, когда игрок двигался, я мог послать сообщение в эту комнату.Как тогда я смогу справиться, когда зрители уходят из комнаты или присоединяются к ней?

Очевидно, что это неясный вопрос, но я просто ищу совет передовой практики.Буду признателен за ссылки на статьи на эту тему.

1 Ответ

4 голосов
/ 06 апреля 2012

Это одна из существенных проблем при разработке MMO-серверов. Обычно требуется сокет для каждого клиента, и вы реализуете логику для подписки клиента на конкретный регион.

Регионы являются хорошим способом настройки «каналов» для управления подпиской на данные. Вы можете иметь отдельные имена для каждого региона и использовать комнаты Socket.io для подписки игроков на регион.

После всего этого дела становятся намного проще. Поэтому, если игрок перемещается в определенном регионе, все, что нужно сделать серверу, - отправить это событие Player Moved всем подписчикам всех регионов в пределах X метров от события.

...