Доступные Игровые языки определения сетевого протокола и генерация кода

Если v1, v2 и т. Д. numpy.arrays, вы можете сделать

np.sum(np.logical_and(v1<v2, v2<v3))
11
задан 7 revs 17 July 2009 в 16:10
поделиться

9 ответов

Структуры сетевых протоколов I ' Мы обнаружили следующее:

  1. Буфер протокола Google - но он не поддерживает такие вещи, как отправка / получение произвольных сообщений по вашему протоколу.
  2. Apache Thrift - интересный вариант, но он ориентирован в основном на к RPC вместо обычных соединений типа сокета клиент / сервер игры, где клиент или сервер могут отправлять сообщения в любое время, а не только в ответ на клиентский запрос RPC.
  3. Raknet Multiplayer - Raknet предоставляет полную многопользовательскую сетевую библиотеку ( это бесплатно для инди-разработки с доходом менее 250 тысяч долларов)

ОБНОВЛЕНИЕ : OculusVR приобрела RakNet и его бесплатный / открытый исходный код. Вы можете найти его на Github

  1. Hessian Binary Web Service Protocol - это бинарный протокол веб-службы HTTP, он хорошо подходит для отправки двоичных данных без необходимости расширения протокола с помощью вложений.

Raknet предоставляет хорошую многопользовательскую библиотеку, ориентированную на игры / моделирование.

Apache Thrift и буферы протоколов Google кажутся простейшими подходами к использованию в архитектуре клиент / сервер игрового сетевого протокола.

Hessian отлично подходит, если вы хотите создать игровой веб-сервер с Java или флэш-клиентом, используя какой-либо тип технологии проталкивания сервера, например COMET . Hessian может предоставить действительно интересный способ поддержки игр в реальном времени в сети и даже иметь возможность размещать их на веб-решениях виртуальных машин, таких как движок приложений Google или EC2 от Amazon.

Есть некоторые дискуссии об использовании различных фреймворков определения протоколов для игр и другое использование:

14
ответ дан 3 December 2019 в 06:47
поделиться

Я хочу повторить предложение Билла К. Нетрудно накатить собственный протокол.

Что касается iPhone, взгляните на AsyncSocket , который поддерживает встроенные TCP-пакеты на основе разделителя, и несложно создать решение, использующее заголовки пакетов. .

Если вы хотите быстро запустить тестовый сервер для AsyncSocket на iPhone, вы можете взглянуть на Naga (для серверной части Java), в котором есть готовые вещи как для пакетов, так и для пакетов на основе разделителя. с заголовками. Нага был частично написан с учетом сетевых игр.

0
ответ дан 3 December 2019 в 06:47
поделиться

Я не согласен с "подходом с использованием простых строк с разделителями": вопрос в том, что именно принесет пользу? Начало писать и поддерживать больше кода? Единственными причинами, которые я мог видеть, было отсутствие поддержки инструмента (написание для какой-то нечетной платформы), или конкретные (очень) жесткие ограничения производительности или размера сообщения. Or, sometimes, really wanting to write a format -- that's ok, but it must be an explicit reason.

Depending on exact needs I would suggest considering JSON, since it can read and write arbitrary messages; has good object binders for Java (just like xml), is easier to read than binary formats, and is all around "good enough" for many use cases.

If message size is very important, Protobuf can work well -- while its size is not always as small as gzipped alternatives (gzip+xml, gzip+json compress very well), it's usually close.

0
ответ дан 3 December 2019 в 06:47
поделиться

ASN.1 соответствует определению «хорошей среды определения протокола двоичной сети общего назначения. ». Он также стандартизирован ITU-T, так что '

0
ответ дан 3 December 2019 в 06:47
поделиться

Если вы пойдете по пути написания собственного протокола,

1
ответ дан 3 December 2019 в 06:47
поделиться

Because you want to use different languages and also because you want something clean/small, I suggest the protocol buffers of google. You need a pre-compile part for the RPC but I really think that's the best option when you begin to mix different languages.. Here's the link: http://code.google.com/apis/protocolbuffers/docs/overview.html

0
ответ дан 3 December 2019 в 06:47
поделиться

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

Протокол IP был разработан для поддержки нескольких устройств / ОС единообразно, разве это не то, о чем вы просите? Какой протокол реализуется в огромном количестве систем, хм, возможно, IP?

0
ответ дан 3 December 2019 в 06:47
поделиться

Если вас действительно беспокоит несколько платформ и языков, обязательно примите во внимание проблемы endian . Бинарный протокол, разработанный для этого использования, должен использовать сетевой порядок байтов, поэтому для него требуются специальные функции сериализации для каждого типа данных; вы не можете просто вслепую протолкнуть C-структуры в сетевые буферы.

Распространенным решением этой проблемы в игровых компаниях является создание языка описания протокола или спецификации в простом формате, таком как XML, python или lua, а затем генерация кода для каждой цели язык, который генерировал классы пакетов со структурой данных и сериализацией. Эта спецификация может использовать систему типов, которая начинается с базовых типов, а затем расширяется, чтобы включать специфические для игры типы с семантической информацией, перечислениями или более сложными структурами. Например, файл данных может выглядеть так:

1
ответ дан 3 December 2019 в 06:47
поделиться
2
ответ дан 3 December 2019 в 06:47
поделиться
Другие вопросы по тегам:

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