Хорошо, WebRTC - это не новая вещь в 2020 году, однако до сих пор никогда не удавалось создать игру с поддержкой WebRTC в конкурсе js13kGames.

Как вы, наверное, знаете, с 2013 года конкурс js13kGames имеет категорию Сервер, и под словом сервер мы подразумеваем мультиплеер. Однако мы никогда не смогли реализовать STUN сервер (базовую инфраструктуру работы WebRTC) и отличную игру в пределах 13k размера. А с 2014 года у нас есть (необходимые) технические ограничения на реализацию некоторых серверных функций, из-за которых невозможно добавить функционал STUN в простую игру.

Что ж, единственное хорошее решение - это гибкость Правила №3 (Никаких внешних библиотек или служб), чтобы разрешить подключение к серверам STUN Google:

  • stun.l.google.com:19302
  • stun1.l.google.com:19302
  • stun2.l.google.com:19302
  • stun3.l.google.com:19302
  • stun4.l.google.com:19302

Почему это интересно и почему вам стоит учесть это в своей следующей игре

WebRTC - это технология, позволяющая устанавливать P2P-соединения между веб-браузерами…

Эй, а зачем это говорить о реализации сервера?

Что ж, в этом мире, где Интернет представляет собой скопление NAT, ни одно приложение конечного пользователя не может просто начать взаимодействовать с другим приложением конечного пользователя без кого-либо с публичным адресом для промежуточного соединения этих одноранговых узлов.

При этом с WebRTC вы можете обмениваться медиапотоками и данными без сервера между ними, получая и обрабатывая все данные.

Первая очевидная возможность - объединить голосовое и видео-взаимодействие пользователей как часть игры.

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

Позвольте мне объяснить: в большинстве реализаций многопользовательских игр игровая логика выполняется на сервере. Если игра является MMO или в ней есть комнаты для ограниченного количества игроков в сеансе, сервер будет немного замедляться для каждого игрока. И это быстро станет проблемой производительности на бесплатном сервере.

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

Большой! Как реализовать WebRTC?

Я могу дать вам несколько хороших ссылок, содержащих все, что вам нужно знать (и некоторый код для копирования и вставки):

⚠ Помните: в конкурсе js13kGames допускаются только общедоступные серверы STUN Google. Никакие другие и никакие серверы TURN не разрешены.