Различие между DatagramSocket и DatagramChannel

В течение этого семестра в университете мы должны записать сетевые игры (в Java) в командах 4. Я добровольно предложил работать над сетевым кодом для своей команды.

Читая на сетях Java, кажется, что существует два метода UDP сетей:

http://java.sun.com/j2se/1.4.2/docs/api/java/net/DatagramSocket.html Это - стандарт, выглядящий сокетом UDP, который может отправить пакеты в любой IP-адрес любого порта.

http://java.sun.com/j2se/1.4.2/docs/api/java/nio/channels/DatagramChannel.html Это - своего рода система канала, созданная сверху сокета udp. Я не совсем уверен, что это предлагает, кроме способности только соединиться с одним клиентом, который не очень полезен в этом случае.

Это единственные опции? Который является лучшим для использования для многопользовательской игры в реальном времени с 4-8 плеерами?

6
задан Martin 16 January 2010 в 23:29
поделиться

3 ответа

Просто используйте;

NSArray* reversed = [[myArray reverseObjectEnumerator] allObjects];

Порядок задокументирован , чтобы быть правильным:

Этот массив содержит все остальные объекты перечислителя в порядке перечисления [добавлено ударение].

-121--1232835-

Предварительно признав, что это глиб-ответ, Option is a monad.

-121--809607-

Вы не задаете первый вопрос. Первый вопрос: какая дисциплина обмена сообщениями наиболее подходит для этой игры?

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

При масштабе проигрывателя 4-8 можно соединиться с веб-службами и отправить мыльное сообщение. Это касается всей сериализации данных для вас. Черт возьми, ты можешь даже использовать JMS.

Что касается вашего дословного вопроса, то каналы являются частью nio. Они поддерживают multiplexed-wait, что Sockets не делают. Если вам нужно спросить 'есть ли пакет для меня на любом из этих портов?' вы хотите каналы. Без них нужен поток на порт. Разумеется, предполагается, что имеется несколько портов, на которые поступают данные.

5
ответ дан 17 December 2019 в 00:09
поделиться

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

Разрешены ли вы использовать сторонние библиотеки? Если это так, я всегда нашел Jgroups , чтобы быть очень хорошим для выполнения надежных многоадресов. Легко учиться и очень настраивается. (Независимо от того, стоит ли ли это подходящую производительность-мудрый для игры в реальном времени, я не уверен, но я использовал его в прошлом, чтобы оттолкнуть много данных, и никогда не было проблем с производительностью.)

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

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

Возможно, но игры в реальном времени проблематичны вне зависимости от того, какие интернет-технологии используются:

  • Если вы хотите поддерживать игроков на другом конце планеты, вам придется иметь дело с сетевыми задержками порядка 1/2 секунды или более.

  • Если вы хотите поддерживать игроков в следующем округе, вам придется иметь дело с периодическими "заморозками", вызванными потерями пакетов в результате перегрузки сети и т.д.

  • Если вы хотите поддерживать большое количество игроков, то вам придется иметь дело с масштабированием, как локальным использованием ресурсов, так и пропускной способностью сети.

Таким образом, хотя ваш выбор сетевого транспорта важен, это только одна часть проблемы. Вероятно, более важным является разработка протоколов прикладного уровня (игрового) для минимизации влияния сетевых задержек и зависаний / потерь пакетов на "опыт игрока". Или просто ограничить использование игры в локальной сети.

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

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