как спроектировать канал связи игрового сервера - PullRequest
2 голосов
/ 14 декабря 2010

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

Я решил использовать nodejs и redis, формат данных протокола - JSON, websocket

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

Является ли nodejs, redis, JSON хорошим выбором для проектирования канала связи, поддерживает ли websocket большинство браузеров?

Может быть, вопросов слишком много, вопрос только в том, как спроектировать канал связи для игрового сервера?

Ответы [ 4 ]

4 голосов
/ 03 января 2011

Для каналов связи я бы порекомендовал socket.io , который предоставляет API, похожий на websockets, поверх того, что поддерживает браузер. Он возвращается к сокетам Flash, а затем к jsonp и long-polling по мере необходимости. Он хорошо поддерживается в Node, и пользователи будут автоматически улучшать его, так как их браузеры изначально поддерживают веб-сокеты.

Вы можете выполнять http-запросы менее чем за 100 мс - дома я обычно вижу ~ 75 мс, получая 25 КБ jquery.min.js с серверов Google AJAX API, и ~ 25 мс, чтобы возвращать неизмененными, но это требует инженерия, чтобы быть уверенным. Если у вас есть соединение keepalive, то у вас нет накладных расходов на настройку соединения (особенно важно, если вы используете SSL для защиты учетных данных пользователя), поэтому оно может стать еще быстрее.

Несмотря на это, я бы использовал socket.io, поскольку он также предоставляет хороший API.

4 голосов
/ 15 декабря 2010

Прежде всего, в следующий раз используйте реальный тег , чтобы люди действительно нашли ваш вопрос.

Что касается самого вопроса, то да, Node.js отлично подходит для многопользовательских игр, особенно с WebSockets ... но они были отложены как минимум на полгода из-за недавно обнаруженных проблем безопасности с неправильно настроенными прокси-серверами (на самом деле не вина WebSockets, но все и их мама запаниковали по этому поводу).

Подробнее:
http://hacks.mozilla.org/2010/12/websockets-disabled-in-firefox-4/
http://blog.pusherapp.com/2010/12/9/it-s-not-websockets-it-s-your-broken-proxy

А пока ...

Если у вас есть игра с задержкой менее 100 мс, у вас останутся Flash Sockets, как запасной вариант.

Кроме того, JSON является плохой идеей. Он чрезвычайно раздут для отправки игровых данных. То, что я делал, когда создавал свою первую многопользовательскую игру с Node.js, создавало BiSON . Это похоже на замену JSON, оно не поддерживает 100% функций JSON, но поддерживает небольшой размер закодированных данных и скорость.

Так что, если вы хотите поэкспериментировать с WebSockets или в ближайшем будущем использовать Flash-сокеты, то вам стоит проверить две игры, которые я сделал:

https://github.com/BonsaiDen/NodeGame-Orbit (Стратегическая игра а-ля Eufloria)
https://github.com/BonsaiDen/NodeGame-Shooter (Перекрестный мультипликатор астероидов / Geometry Wars)

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

0 голосов
/ 14 декабря 2010

Веб-сокеты не поддерживаются большинством моих браузеров на компьютерах конечных пользователей. Старайтесь использовать бесконечно загружаемые iframe через HTTPS (через SSL, чтобы избежать глупых прокси, которые хотят полностью загрузить бесконечно загружаемый iframe перед его передачей) для получения данных, что широко поддерживается. Для отправки используйте AJAX-запросы.

Создайте на странице iframe такие строки, как http:

<script>newData("...")</script>

Если это слишком медленно для вас, используйте апплет flash / java для связи.

0 голосов
/ 14 декабря 2010

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

Кроме того, во многих играх используются бинарные протоколы, причем битовые потоки довольно распространенысохранить пропускную способность.JSON, по крайней мере, на несколько порядков от этого мира, поэтому, возможно, вам следует ограничить свою область от «игр» до чего-то более ограниченного.Здесь, кажется, вы чрезмерно обобщаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...