Одноранговые игры, Javascript игры

Я пишу простую игру javascript для веб-страницы. Я собираюсь преобразовать его в рабочий стол с помощью tidesdk. Я хотел бы позволить игрокам на разных компьютерах играть друг с другом без необходимости общаться через сервер.

  1. Возможно ли это вообще? Это сокеты?? У вас есть какие-либо ссылки на то, что это делается с помощью кода javascript?
  2. Возможно ли это с TideSdk? Знаете ли вы какие-либо ссылки на примеры того, как это делается с помощью TideSdk?
  3. Как игроки узнают, на каком IP-адресе/порте находится их машина, чтобы они могли передать ее другому игроку?

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

... О, и я не хочу использовать какие-либо сторонние материалы, если могу. Может быть, jquery в толчке.


person Rewind    schedule 30.05.2013    source источник
comment
Без какого-либо сервера, будь то у вас или у третьей стороны, я не могу придумать, как это сделать. WebSockets, вероятно, то, что вам нужно, если вы хотите живой игровой процесс, но для управления соединениями нужен сервер. Я никогда не использовал TideSDK, хотя он выглядит круто, так что у них может быть что-то особенное для этого.   -  person Ian    schedule 30.05.2013
comment
Поддерживая Иэна, WebSockets — ваш вероятный ответ. В этом случае вам понадобится какой-то сервер, но, по крайней мере, вы можете приблизиться к одноранговой сети в реальном времени. Я предлагаю взглянуть на NodeJS для создания вашей платформы WebSocket.   -  person Matt Holmes    schedule 30.05.2013
comment
WebRTC — это то, что вам нужно. Но вам все равно понадобится сервер для инициации связи между игроками. Но как только вы это сделаете, это будет p2p.   -  person PeeHaa    schedule 30.05.2013
comment
Спасибо за ваши ответы. Я смотрю на это.   -  person Rewind    schedule 31.05.2013


Ответы (2)


Это было бы невозможно с API-интерфейсами, предоставляемыми веб-браузерами (вам нужно было бы использовать что-то вроде Socket.IO и общаться через сервер, как говорили другие). К счастью, поскольку вы используете TideSDK, это возможно, если вам не требуется высокая эффективность сети. Вам потребуется предоставить сервер, но он не обязательно должен быть достаточно мощным для размещения реальных игр.

Общий метод клиента и сервера

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

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

Сервер подбора партнеров должен выбрать одного из этих клиентов в качестве хоста для остальных. Наконец, сервер подбора партнеров сообщит клиенту, выбранному в качестве хоста, что он является хостом, и предоставит ему информацию о каждом подключении (порты и IP-адреса), а другим клиентам предоставит информацию о подключении для выбранного хоста. Хост подключится к другим клиентам.

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

Реализация

TideSDK предоставляет Ti.Network.TCPSocket объект, который может устанавливать необработанные TCP-клиентские соединения с TCP-серверами. К сожалению, он также не позволяет создавать необработанные TCP-серверы. Вместо этого TideSDK предоставляет Ti.Network.HTTPServer. объект, который реализует сервер протокола HTTP через TCP, и Ti.Network.HTTPClient, который предоставляет HTTP-клиент (на самом деле это просто абстракция над обычным API запросов AJAX). Вы можете использовать предоставленный HTTP-сервер на хост-компьютере и напрямую подключаться к нему на клиентах с помощью предоставленных HTTP-клиентов. Обмен данными будет осуществляться по протоколу HTTP. Насколько я могу судить, это ваш единственный вариант здесь.

Я не нашел там ни одного примера кода (кроме того, что есть в документации TideSDK), но вы можете найти его, если вам действительно интересно.

Следующие шаги

Если бы я хотел продолжить использование TideSDK, я бы сделал следующее:

  • Сообщите разработчикам TideSDK, что вас интересует серверный сокет TCP. Необработанное TCP-соединение будет намного быстрее, чем HTTP.
  • Протестируйте HTTP-соединение и убедитесь, что оно достаточно быстрое для моей игры.
person Michael Younkin    schedule 30.05.2013

Да в принципе можно, и розетки то что надо. Хотя я не думаю, что это возможно на практике, вот почему.

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

Без сервера пользователи не смогут увидеть, кто находится в сети, и ответить на ваш третий вопрос:

  • Как игроки узнают, на каком IP-адресе/порте находится их машина, чтобы они могли передать ее другому игроку? IP оппонента (без звонка им по телефону :)).

Итак, если вы хотите создать игру, вам понадобится сервер. Я предлагаю Node.JS вместе с Socket.IO

person Drahcir    schedule 30.05.2013
comment
Спасибо за ответ. Это очень полезная информация. - person Rewind; 31.05.2013