Как мне создать простую игру для 2 игроков, которая общается через Интернет?
Мне нужно решить следующие проблемы:
поиск или встреча - два игрока хотят найти друг друга.
постоянная связь.Любой из игроков может инициировать действие, требующее доставки информации другой стороне в разумно короткие сроки (задержка типа IM, а не задержка типа электронной почты).
В этом отношении, я полагаю, это эквивалентно двустороннему чату, в котором люди хотят иметь возможность находить друг друга, а также, когда они в паре, общаться друг с другом.
Дополнительные требования:
на данный момент предположим, что конечными точками являются ОС Windows, относительно недавние.
предполагается, что ни один конечный компьютер не доступен напрямую из Интернета.Предположим, что они являются клиентскими компьютерами, скрытыми за брандмауэрами, которые блокируют входящие запросы.Машины могут делать исходящие запросы.(скажем, через HTTP, но с TCP тоже все в порядке)
связь должна быть конфиденциальной.Для простоты предположим, что общий секрет уже существует, и конечные точки могут выполнять AES.Я предполагаю, что я имею в виду, что любой посредник не должен расшифровывать пакеты сообщений.Расшифровка произойдет только в конечных точках.
весь пользовательский код должен выполняться только на клиентских ПК.
Предположим, что в Интернете нет сервера, который находится под моим контролем.
Я рад использовать сторонние серверы для облегчения взаимодействия, такие как IM-сервер или что-то еще, если он бесплатный, и мне не требуется устанавливать на него собственный код,
Какие API доступны для облегчения этой конструкции?
Могу ли я сделать это с помощью API IM?WCF?Есть ли каналы WCF для Windows Messenger?
Какие протоколы?HTTP?Я пометил это как «одноранговый», но я имею в виду, что фактически ;нет строгих требований к формальному протоколу p2p.
Какие форматы сообщений вы бы использовали?
РЕДАКТИРОВАТЬ
Чтобы прояснить требования к серверам, я хочу НЕ СЕРВЕР ПОД МОЕМ УПРАВЛЕНИЕМ.И НИКАКОГО МОЕГО ТАМОЖЕННОГО КОДА НА ЛЮБОМ СЕРВЕРЕ.Это не то же самое, что «Нет сервера».
Подумайте об этом так: я могу отправить электронное письмо по SMTP, используя собственный код, который я пишу на стороне отправителя и получателя.Мой пользовательский код можно подключить через бесплатный SMTP-сервер-посредник.Это не требует установки кода на SMTP-сервере.Это что-то вроде того, что я хочу, но SMTP не является приемлемым из-за задержки.
EDIT2
Я также нашел это: библиотека для обмена мгновенными сообщениями, как libpurple, но написанная на C #
ОТВЕТ
Я могу делать то, что хочу, используя библиотеки для фреймворков IM.Одним из простых способов сделать это с помощью Windows Live Messenger является использование Messenger Activity SDK .Это подтверждает концепцию, но не является общим решением.Но аналогичные вещи могут быть выполнены с помощью библиотек IM для различных систем обмена сообщениями, таких как libpurple, или с помощью библиотек libs для каналов IRC.Во всех этих случаях IM-серверы действуют как коммуникационная инфраструктура, проникающая через брандмауэр.