Всем привет.
Работы по созданию Видео-мафии кипят вовсю.
Напомню, что WhoIsMafia — это новый экспериментальный вариант игры в Мафию, основная идея которого — общение игроков «вживую» через камеры и микрофоны. Сервис сделан практически полностью на технологии peer-to-peer, видео между клиентами транслируется напрямую, а за всю игровую логику отвечают сами клиенты.
Сегодня я представлю хабрапублике новый апдейт и опишу некоторые технологические сложности, порой ставящие меня в тупик.
Так что велкам — заходите, тестируйте, играйте на здоровье.
Когда я начинал работу над проектом, мне хотелось просто попробовать реализацию p2p во flash. И если с передачей видео все понятно (видео — это тяжелый контент, который не должен гоняться через сервер), то с игровыми сообщениями все не так однозначно.
С одной стороны, использование p2p в игре дает огромный плюс при разработке. Во-первых, вместо того, чтобы реализовывать серверную и клиентскую часть, мы делаем только клиент. При этом можно принять как аксиому то, что у всех пользователей сервиса один и тот же клиент, а следовательно все они работаю по одним и тем же правилам. Во-вторых, это открывает огромные возможности по масштабированию приложения — совершенно не надо заботиться о нагрузке на сервер. Ведь от сервера в данном случае требуется лишь познакомить клиентов друг с другом. Хотя в принципе, и эти функции могут быть возложены на клиента — есть технологические возможности.
Но у каждой монетки есть и обратная сторона. И самая большая проблема — это синхронизация действий игроков. Попробую объяснить на пальцах на примере Мафии. У игры есть однозначное начальное состояние — начало игры. Еще никто не получил свои карты. Карты раздаются случайным образом — как это сделать? Тут есть два варианта — либо назначить главного по картам, либо сделать это сообща, когда каждый клиент вносит свой небольшой вклад в рендом. Второй вариант сложно объяснить, поэтому рассмотрим первый вариант с ведущим.
Один из клиентов назначен ведущим. Допустим, это сделал вэб-сервер и каким-то образом донес эту информацию до клиентов. После этого ведущий выступает в роли сервера. Но:
Со всем этим можно бороться. Для первой проблемы, если ведущий долго не отвечает, хотя уже пришло время, можно его сменить. Но как это сделать? Ведь то, что ведущий не отвечает, может «показаться» только одному игроку, а учитывая пункты 2 и 3, — обязательно покажется. Ну раз так — давайте сделаем возможность каждому клиенту стать ведущим, если вдруг ему показалось, что ведущий пропал. Тогда возникнут новые сложности — а что если ведущий уже отправил важное сообщение всем клиентам, а одному оно не дошло, он стал ведущим и сам снова отсылает это важное сообщение, но уже в своей трактовке? Мало того, он же может сделать это специально — пункт 4.
И это только верхушка айсберга в игрострое на основе peer-to-peer. Но я абсолютно точно уверен в том, что все эти сложности решаемы, просто у меня пока не хватает квалификации и опыта. За прошедшие две недели меня неоднократно посещали мысли о том, что хорошо бы перевести игру на что-нибудь вроде XMPP :)
Но пока я не сдаюсь, я верю в то, что за peer-to-peer играми будущее (ну по крайней мере казуальными). Поэтому если у вас есть опыт создания peer-to-peer игр — прошу вас поделиться, все будет послезнее.
Продолжение: Годовой отчет WhoisMafia
Работы по созданию Видео-мафии кипят вовсю.
Напомню, что WhoIsMafia — это новый экспериментальный вариант игры в Мафию, основная идея которого — общение игроков «вживую» через камеры и микрофоны. Сервис сделан практически полностью на технологии peer-to-peer, видео между клиентами транслируется напрямую, а за всю игровую логику отвечают сами клиенты.
Сегодня я представлю хабрапублике новый апдейт и опишу некоторые технологические сложности, порой ставящие меня в тупик.
Апдейт
- Добавлена очень важная для развития проекта функция — просмотр игр и режим «без-камеры». Т.е. даже если у вас нет веб-камеры, вы сможете понаблюдать за ходом игры, пообщаться с другими зрителями и с игроками в перерывах между играми.
- Оптимизирована серверная часть — список комнат обновляется быстрее, правильнее, своевременнее.
- Переделан стартовый экран — теперь там есть подсказки, которые помогут пользователям, не знакомым со спецификой флеша начать игру.
- Хорошенечко доработан чат и системные сообщения, что делает игру более комфортной и понятной.
- Добавлена статистика сети — теперь можно видеть, сколько примерно пользователей находятся на сайте в текущий момент и сколько зрителей смотрит вашу игру.
- Ну и как всегда была проведена гигантская работа по удалению багов, а так же заселению игры новыми разновидностями багов :)
Так что велкам — заходите, тестируйте, играйте на здоровье.
Технологическая дилема: использовать или нет
Когда я начинал работу над проектом, мне хотелось просто попробовать реализацию p2p во flash. И если с передачей видео все понятно (видео — это тяжелый контент, который не должен гоняться через сервер), то с игровыми сообщениями все не так однозначно.
С одной стороны, использование p2p в игре дает огромный плюс при разработке. Во-первых, вместо того, чтобы реализовывать серверную и клиентскую часть, мы делаем только клиент. При этом можно принять как аксиому то, что у всех пользователей сервиса один и тот же клиент, а следовательно все они работаю по одним и тем же правилам. Во-вторых, это открывает огромные возможности по масштабированию приложения — совершенно не надо заботиться о нагрузке на сервер. Ведь от сервера в данном случае требуется лишь познакомить клиентов друг с другом. Хотя в принципе, и эти функции могут быть возложены на клиента — есть технологические возможности.
Но у каждой монетки есть и обратная сторона. И самая большая проблема — это синхронизация действий игроков. Попробую объяснить на пальцах на примере Мафии. У игры есть однозначное начальное состояние — начало игры. Еще никто не получил свои карты. Карты раздаются случайным образом — как это сделать? Тут есть два варианта — либо назначить главного по картам, либо сделать это сообща, когда каждый клиент вносит свой небольшой вклад в рендом. Второй вариант сложно объяснить, поэтому рассмотрим первый вариант с ведущим.
Один из клиентов назначен ведущим. Допустим, это сделал вэб-сервер и каким-то образом донес эту информацию до клиентов. После этого ведущий выступает в роли сервера. Но:
- Ведущий может в любой момент отключиться
- Сообщения от ведущего могут не дойти до одного из клиентов
- Сообщения могут идти не в том порядке, в котором они были отправлены — ведь для коммуникации по RTMFP используется протокол UDP, который не гарантирует доставку
- И наконец, сообщения, посланные ведущим, могут быть поддельные
Со всем этим можно бороться. Для первой проблемы, если ведущий долго не отвечает, хотя уже пришло время, можно его сменить. Но как это сделать? Ведь то, что ведущий не отвечает, может «показаться» только одному игроку, а учитывая пункты 2 и 3, — обязательно покажется. Ну раз так — давайте сделаем возможность каждому клиенту стать ведущим, если вдруг ему показалось, что ведущий пропал. Тогда возникнут новые сложности — а что если ведущий уже отправил важное сообщение всем клиентам, а одному оно не дошло, он стал ведущим и сам снова отсылает это важное сообщение, но уже в своей трактовке? Мало того, он же может сделать это специально — пункт 4.
И это только верхушка айсберга в игрострое на основе peer-to-peer. Но я абсолютно точно уверен в том, что все эти сложности решаемы, просто у меня пока не хватает квалификации и опыта. За прошедшие две недели меня неоднократно посещали мысли о том, что хорошо бы перевести игру на что-нибудь вроде XMPP :)
Но пока я не сдаюсь, я верю в то, что за peer-to-peer играми будущее (ну по крайней мере казуальными). Поэтому если у вас есть опыт создания peer-to-peer игр — прошу вас поделиться, все будет послезнее.
Продолжение: Годовой отчет WhoisMafia