Если v1
, v2
и т. Д. numpy.arrays
, вы можете сделать
np.sum(np.logical_and(v1<v2, v2<v3))
Структуры сетевых протоколов I ' Мы обнаружили следующее:
ОБНОВЛЕНИЕ : OculusVR приобрела RakNet и его бесплатный / открытый исходный код. Вы можете найти его на Github
Raknet предоставляет хорошую многопользовательскую библиотеку, ориентированную на игры / моделирование.
Apache Thrift и буферы протоколов Google кажутся простейшими подходами к использованию в архитектуре клиент / сервер игрового сетевого протокола.
Hessian отлично подходит, если вы хотите создать игровой веб-сервер с Java или флэш-клиентом, используя какой-либо тип технологии проталкивания сервера, например COMET . Hessian может предоставить действительно интересный способ поддержки игр в реальном времени в сети и даже иметь возможность размещать их на веб-решениях виртуальных машин, таких как движок приложений Google или EC2 от Amazon.
Есть некоторые дискуссии об использовании различных фреймворков определения протоколов для игр и другое использование:
Я хочу повторить предложение Билла К. Нетрудно накатить собственный протокол.
Что касается iPhone, взгляните на AsyncSocket , который поддерживает встроенные TCP-пакеты на основе разделителя, и несложно создать решение, использующее заголовки пакетов. .
Если вы хотите быстро запустить тестовый сервер для AsyncSocket на iPhone, вы можете взглянуть на Naga (для серверной части Java), в котором есть готовые вещи как для пакетов, так и для пакетов на основе разделителя. с заголовками. Нага был частично написан с учетом сетевых игр.
Я не согласен с "подходом с использованием простых строк с разделителями": вопрос в том, что именно принесет пользу? Начало писать и поддерживать больше кода? Единственными причинами, которые я мог видеть, было отсутствие поддержки инструмента (написание для какой-то нечетной платформы), или конкретные (очень) жесткие ограничения производительности или размера сообщения. 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.
ASN.1 соответствует определению «хорошей среды определения протокола двоичной сети общего назначения. ». Он также стандартизирован ITU-T, так что '
Если вы пойдете по пути написания собственного протокола,
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
Почему бы не реализовать UDP напрямую? В вашем вопросе в основном упоминается то, что вам не нужно. Какую еще форму абстрагирования вы хотите сделать поверх UDP? Загрузите исходный код Quake III и посмотрите, как они формируют обновления игры по UDP?
Протокол IP был разработан для поддержки нескольких устройств / ОС единообразно, разве это не то, о чем вы просите? Какой протокол реализуется в огромном количестве систем, хм, возможно, IP?
Если вас действительно беспокоит несколько платформ и языков, обязательно примите во внимание проблемы endian . Бинарный протокол, разработанный для этого использования, должен использовать сетевой порядок байтов, поэтому для него требуются специальные функции сериализации для каждого типа данных; вы не можете просто вслепую протолкнуть C-структуры в сетевые буферы.
Распространенным решением этой проблемы в игровых компаниях является создание языка описания протокола или спецификации в простом формате, таком как XML, python или lua, а затем генерация кода для каждой цели язык, который генерировал классы пакетов со структурой данных и сериализацией. Эта спецификация может использовать систему типов, которая начинается с базовых типов, а затем расширяется, чтобы включать специфические для игры типы с семантической информацией, перечислениями или более сложными структурами. Например, файл данных может выглядеть так: