Игры/приложения сети P2P: Хороший выбор для “battle.net” - как соответствие серверу

Расширение ответа Гала, который также будет включать причины для исключения:

private String extrapolateStackTrace(Exception ex) {
    Throwable e = ex;
    String trace = e.toString() + "\n";
    for (StackTraceElement e1 : e.getStackTrace()) {
        trace += "\t at " + e1.toString() + "\n";
    }
    while (e.getCause() != null) {
        e = e.getCause();
        trace += "Cause by: " + e.toString() + "\n";
        for (StackTraceElement e1 : e.getStackTrace()) {
            trace += "\t at " + e1.toString() + "\n";
        }
    }
    return trace;
}
6
задан yairchu 3 August 2009 в 14:42
поделиться

6 ответов

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

Похоже, что наиболее часто назначаемым решением для обхода UDP NAT является использование сервера STUN . Я провел несколько быстрых поисков, чтобы увидеть, есть ли какие-либо компании, которые просто прямо предоставят вам решение для хостинга STUN, но если они вообще были, они были похоронены в кучах рекламы простого веб-хостинга.

К счастью, кажется, есть несколько серверов STUN, которые уже запущены и бесплатны для публичного использования. Список общедоступных серверов STUN можно найти по адресу voip-info.org .

Кроме того,

3
ответ дан 10 December 2019 в 00:42
поделиться

Я не вижу другого выбора, кроме как иметь выделенный сервер, на котором выполняется ваш код. Другие предлагаемые вами решения, скажем так, менее чем оптимальны.

Если вы начнете с малого, виртуальный хостинг подойдет. Затраты довольно минимальны.

3
ответ дан 10 December 2019 в 00:42
поделиться

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

Например, Lunarpages имеет стартовый пакет за 3 доллара в месяц, который включает 5 ГБ пространства и 50 ГБ полосы пропускания. Для чего-то такого простого, это все, что вам может понадобиться.

Затем ваше приложение просто опросит веб-страницу на предмет списка игр и отправит запрос POST, чтобы добавить свою игру в список.

Of Конечно, этот метод требует изучения PHP и MySQL, если вы их еще не знаете. И если вы сделаете это правильно, вы можете заставить страницу PHP войти в своего рода бесконечный цикл, чтобы соединение оставалось открытым и просто передавало обновления клиенту, вместо того, чтобы опрашивать страницу каждые несколько секунд и тратить много трафика. Однако это выходит за рамки этого ответа.

О, и если вы ищете что-то абсолютно бесплатное, поищите бесплатный хост PHP. Такие тоже есть! Даже с хостом, поддерживающим рекламу, ваше приложение может просто захватить страницу и игнорировать рекламу, когда вы анализируете список игр. Я знаю, что T35 когда-то был одним из моих любимых, потому что их бесплатный план не отслеживает пространство или пропускную способность (он ограничивает размер файла, чтобы исключить их использование в качестве общего ресурса мультимедиа, но он не должно быть проблемой для файлов PHP). Но, конечно, я думаю, что в долгосрочной перспективе вам будет лучше использовать платный хостинг.

Edit: T35 также говорит: «Бесплатный хостинг позволяет размещать 1 домен, а платный предлагает неограниченный хостинг для доменов». Так что вы даже можете просто заплатить за доменное имя и привязать его к ним! Я думаю, что в краткосрочной перспективе это ваш лучший (самый дешевый) выбор. Конечно, все это предполагает, что вы либо знаете, либо желаете изучить PHP, чтобы это произошло. :)

2
ответ дан 10 December 2019 в 00:42
поделиться

Промежуточным решением между размещением вашего собственного выделенного сервера и строго P2P сетевой средой является модель gnutella. В этой модели есть суперпользователей , которые действуют как локальные серверы, имея известные IP-адреса и подключенные (и, следовательно, имеющие информацию) к большему количеству клиентов, чем типичный одноранговый узел. Это по-прежнему требует, чтобы вы сами управляли хотя бы одним суперпером, но это дает вам возможность разрешить другим людям запускать своих собственных суперпользователей.

0
ответ дан 10 December 2019 в 00:42
поделиться

Нет ничего, что поддерживало бы каждое сетевое соединение. STUN, вероятно, хорош, UPnP может с этим работать.

Однако ходят слухи, что большинство межсетевых экранов можно соблазнить передать почти все что угодно через порт 53 UDP (DNS). Однако вам, возможно, придется поспорить с ОС по поводу вашего доступа к этому порту.

Также ознакомьтесь с SIP , это еще один протокол, предназначенный для такого рода вещей. С ростом популярности VOIP для этого может быть приличная встроенная поддержка в большем количестве брандмауэров.

Если вы действительно привержены UDP, вы можете также рассмотреть возможность его туннелирования через HTTP.

1
ответ дан 10 December 2019 в 00:42
поделиться

как насчет того, чтобы разбить проблему на две части - создать клиент сопоставления игр (отличный от игры), который может связываться через http с вашим дешевым / общим веб-хостом. Все игроки, которые хотят использовать функцию сопоставления игр, используют это. Затем клиент сопоставления игр запускает саму игру с правильными параметрами (IP и т.д.) после получения информации с вашего сервера.

Затем игра будет использовать стандартный способ пробивки UDP через NAT и т. Д. В соответствии с кодом вашей сети. На самом деле игре не нужно ничего знать о сопоставительном клиенте или сопоставительном сервере - в истинном смысле p2p (например, о торрентах, когда вы можете получить IP-адреса своих сверстников, вы даже можете отключиться от трекера).

Таким образом, ваш проблем становится меньше.

1
ответ дан 10 December 2019 в 00:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: