Как создать простую игру для двух игроков, взаимодействующих через Интернет, без пользовательского кода на каком-либо сервере?

StackOverflow https://stackoverflow.com/questions/2144287

  •  23-09-2019
  •  | 
  •  

Вопрос

Как я могу создать простую игру для 2 игроков, которая взаимодействует через Интернет?

Мне нужно решить проблемы:

  • поиск или рандеву - два игрока хотят найти друг друга.

  • текущие коммуникации.Любой игрок может инициировать действие, требующее доставки информации другой стороне, в разумно короткие сроки (задержка обмена мгновенными сообщениями, а не электронной почтой).

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

Дополнительные требования:

  1. на данный момент предположим, что конечными точками являются относительно новые ОС Windows.

  2. предположим, что ни одна из конечных машин не доступна напрямую из Интернета.Предположим, что это клиентские компьютеры, скрытые за брандмауэрами, которые блокируют входящие запросы.Машины могут отправлять исходящие запросы.(скажем, через HTTP, но TCP тоже подойдет)

  3. общение должно быть конфиденциальным.Для простоты предположим, что общий секрет уже существует, и конечные точки способны выполнять AES.Я предполагаю, что я имею в виду под этим, что любому посреднику не нужно расшифровывать пакеты сообщений.Расшифровка будет происходить только в конечных точках.

  4. весь пользовательский код должен выполняться только на клиентских компьютерах.

  5. Предположим, в Интернете нет сервера, который находился бы под моим контролем.

  6. Я с удовольствием использую сторонние серверы для облегчения взаимодействия, такие как сервер обмена мгновенными сообщениями или что-то в этом роде, если это бесплатно, и мне не требуется устанавливать на него пользовательский код.


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

Могу ли я сделать это с помощью IM APIS?WCF?Существуют ли каналы WCF для Windows Messenger?

Какие протоколы?HTTP?У меня это помечено как "peer-to-peer", но я имею в виду, что виртуально;нет никаких жестких требований к официальному протоколу p2p.

Какие форматы сообщений вы бы использовали?


Редактировать

Чтобы уточнить требования, предъявляемые к серверам, я хочу, чтобы СЕРВЕР НЕ НАХОДИЛСЯ Под МОИМ КОНТРОЛЕМ.И НИ На ОДНОМ СЕРВЕРЕ НЕТ МОЕГО ПОЛЬЗОВАТЕЛЬСКОГО КОДА.Это не то же самое, что "Нет сервера".

Подумайте об этом с такой точки зрения:Я могу отправить электронное письмо по SMTP, используя пользовательский код, который я пишу на стороне отправки и получения.Мой пользовательский код может подключаться через бесплатный SMTP-сервер-посредник.Это не потребовало бы установки кода на SMTP-сервер.Это что-то вроде того, что я хочу, но SMTP неприемлем из-за задержки.

РЕДАКТИРОВАТЬ 2
Я также нашел это: библиотека для обмена мгновенными сообщениями, похожая на libpurple, но написанная на C#


ОТВЕТ

Я могу делать то, что хочу, используя библиотеки для фреймворков обмена мгновенными сообщениями.Один из простых способов сделать это с помощью Windows Live Messenger - использовать Пакет SDK для работы с мессенджерами.Это подтверждает концепцию, но на самом деле не является общим решением.Но аналогичные действия могут быть выполнены с помощью библиотек обмена мгновенными сообщениями для различных систем обмена сообщениями, таких как libpurple, или с использованием библиотек для IRC-каналов.Во всех этих случаях серверы обмена мгновенными сообщениями действуют как инфраструктура связи, проникающая через брандмауэр.

Это было полезно?

Решение

libpurple вместе с otr это может обеспечить вам конфиденциальность по сравнению с IM, необходимую такому приложению.

Другие советы

Это нормально использовать те же данные в поисках сетки, которые я буду использовать во время реальной классификации?

Это нормально использовать эти данные для обучения (подходящего) классификатора. Перекрестная проверка, как это сделано StratifiedKFold, предназначена для ситуаций, когда у вас недостаточно данных для удержания набора проверки при оптимизации гиперпараметров (настроек алгоритма). Вы также можете использовать, если вы ленивы, чтобы сделать Splitter Splitter Validation и хочу полагаться на встроенный перекрестную проверку Scikit-Surrey :)

Опция refit для GridSearchCV будет исправить оценку на полной подготовке набора после нахождения оптимальных настроек с помощью перекрестной проверки.

Это, однако, бессмысленно на применить обученный классификатор к данным, которые вы сетки искали или обучены, поскольку у вас уже есть метки. Если вы хотите выполнить формальную оценку классификатора, вы должны продержать тестовый набор с самого начала и не прикосновение к этому снова, пока вы не сделаете всю свою поисковую программу, валидацию и фитинг.

Каждая игра с двумя игроками должна иметь какую-то тип серверной среды благодаря основной необходимости общения между двумя клиентами/игроками, по крайней мере. Имейте в виду, что каждый из клиентов/игроков также может выступать в качестве собственного сервера для связи с другими связанными клиентами. Но необходимость следить за всеми клиентами/игроками в любой момент времени и необходимость облегчения поиска других клиентов/игроков по своей сути требует какой -то типа серверной среды для начала.

Вы могли бы установить доску объявлений на одном из бесплатных серверов, чтобы игроки могли находить друг друга.Вероятно, вы захотите предложить им использовать личные сообщения для обмена IP-адресами.Затем используйте протокол, который соединяет с использованием IP-адресов.Удачи тебе в этом.Брандмауэры делают это невыносимым испытанием.

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

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

Удачи.Тебе это понадобится.

Или вы могли бы просто написать игру для IM-клиента, например Microsoft Messenger.Я видел игры для этого, так что я знаю, что это можно сделать.

Как сказал кто -то, возможно, еще невозможно сделать это, если у вас нет опосредованного сервера между 2 игроками. Как вы с удовольствием используете сторонний сервер, я предлагаю создать вашу систему, используя Google App Engine + XMPP над http. Это прекрасно работает над интернетом и за брандмауэром. И все же это бесплатно (до тех пор, пока ваша система не вырастет из квоты Gae).

Peer to Peer вышел из -за вашего брандмауэра. В любом случае это не работает для служб каталогов.

Следующим простым методом, который я использовал бы, является подброс очень простой скрипт сервера CGI на одном из многочисленных супер дешевых сайтов веб -хостинга. Кажется, вы не хотите идти по этому пути. Есть ли какая -то конкретная причина? 100 строк кода и супер дешевый сервер должны дать вам все, что вы просите, и больше.

Я полагаю, вы могли бы зацепить какую -то стороннюю библиотеку чата. Я не знаю о текущих протоколах IM, но старый добрый IRC и отдельный канал для вашей игры сработают. Вы даже могли бы что -то вместе с помощью FTP. Комментарии блога на бесплатном блог -сайте тоже будут работать. Вопрос в том, почему?

Это все Kludges. Они выполняют работу в тупых, неотъемлемых и плохо масштабирующих способах.

Я призываю вас пересмотреть решение веб -сервера.

У вас много противоречивых требований. Оба клиента, стоящие за брандмауэром, блокирующим входящие запросы в значительной степени означает, что они не могут делать Peer-2-Peer, поскольку ни одна машина не может выступать в качестве сервера, и вам потребуется иметь транспортный сервер в середине где-то маршрутизацию сообщений для каждого клиента. Прямо сейчас то, что вы спрашиваете, в значительной степени невозможно, учитывая требования без сервера.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top