Как соединить пару клиентов вместе через сервер для онлайн-игры? - PullRequest
1 голос
/ 28 октября 2009

Я разрабатываю многопользовательскую игру и ничего не знаю о том, как подключиться от одного клиента к другому через сервер. С чего мне начать? Существуют ли какие-нибудь фантастические проекты с открытым исходным кодом, которые предоставляют коммуникационную среду, в которую я могу отбрасывать свои сообщения, или мне приходится писать множество сложного многопоточного кода Sockety? Меняется ли картина вообще, если клиенты работают на телефонах?

Я не зависим от языка, хотя в идеале у меня был бы интерфейс Flash или Qt и сервер Java, но это может быть немного жадным.

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

Ответы [ 4 ]

1 голос
/ 28 октября 2009

Обычно игровые движки отправляют UDP-пакеты из-за задержки. Дело в том, что TCP просто недостаточно быстр, и надежность менее важна, чем скорость.

Веб-службы могут усугубить проблемы с задержкой, присущие TCP из-за дополнительных издержек. Кроме того, они будут поглощать память в зависимости от количества ожидаемых игроков. Наконец, у них есть большой объем полезной нагрузки, который вам просто не нужен (xml-нибудь?).

Есть несколько способов сделать это. Одним из способов является централизованный обмен сообщениями (клиент / сервер). Это означает, что у вас будет Java-сервер, прослушивающий пакеты udp от клиентов. Затем он будет ретранслировать их любому из соответствующих пользователей.

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

С этого момента клиенты передают пакеты udp напрямую другим пользователям.

1 голос
/ 28 октября 2009

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

Вы также можете использовать встроенный интерфейс обмена сообщениями flex . Там есть положения, позволяющие клиенту взаимодействовать с клиентом.

0 голосов
/ 28 октября 2009

Вы также можете взглянуть на Flash Media Interactive Server или, если вам нужна реализация Java, Wowsa или Red5. Они используют AMF и предоставляют собственные функции для ShareObjects, включая синхронизацию ShareObjects среди подключенных клиентов.

Тем не менее, они не равноправны (но скоро я услышу). Они используют централизованный обмен сообщениями, управляемый сервером.

Удачи

0 голосов
/ 28 октября 2009

Если вы ищете коммуникационную среду с высокой производительностью, попробуйте взглянуть на ACE C ++ framework (она имеет привязки Java).

Официальный сайт: http://www.cs.wustl.edu/~schmidt/ACE-overview.html

...