Обмен данными между сервером и клиентом

19.07.2007 Квиринг Алексей

Самой первой задачей в далеком 2006 году, когда игра казалась маленьким проектом и работали вечерами после основной работы, возникла первая задача — как же обмениваться данными между сервером и клиентом. Напоминаю, сервер на Java, клиент — на Flash.

Для начала рассмотрим стандартные возможности флеша по передаче данных — XML и AMF. Первый вариант отпадает практически сразу, так как текстовый формат тяжел для парсинга и не оптимальный по размеру.

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

Неделя ушла на создание первого прототипа. Сделали поддержку стандартных типов (byte, short, int, long, double), бонусом получили возможность достаточно просто добавлять другие примитивные типы. Далее задумались, как передавать структурные типы (List, Map, Array и String). В итоге пришли к решению передавать размер структуры как byte, short или int — в зависимости от размера. И в заключении ввели рекурсию, то есть можно в List положить Map в Map Array и так далее.

Разработка окончательного варианта на JAVA заняла две недели, включая JUNIT тесты. А далее самое интересное — разработка сетевой библиотеки на Flash.

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

Итог работы — быстрая, асинхронная (и на Java, и на Flash), надежная сетевая библиотека, с широкой поддержкой разных типов данных. Работает быстрее чем AMF и экономнее расходует сетевой трафик.

Комментарии (8) на “Обмен данными между сервером и клиентом”

  1. Flop Says:

    а выложите ли на паюзание протокол?
    или хоть пингпонг патыкать?

  2. SmivaL Says:

    Выложить здесь протокол значит открыть серьезную дыру в безопасности.
    вот.

  3. Алексей Says:

    SmivaL - в книге Б. Шнайера была приведена чья-то фраза утверждающая, что если Ваша безопасность основана на незнании злоумышленников, то Вы пропали.
    Учитывая что Flash Decompiller выдаёт что-то более читаемое чем Hiew/IDA то фраза кажется резонной.
    Вы так не считаете?

    Плюс - http://bash.org.ru/quote/341286 :)

  4. Квиринг Алексей Says:

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

  5. Алексей Says:

    Здравствуйте! Я уже писал Вам на e-mail, но ответа так и не получил. Мне очень интересно где Вы будете размещать сервера с игрой? У себя в Перми, или в Москве? Если в Москве - будете арендовать или свои ставить? Если свои ставить - как предполагается менять свежесгоревший райзер/RAID-контроллер?

  6. Алексей Says:

    Строго-говоря предыдущий вопрос к тому, что связь между клиентом и сервером - Тамбов-Пермь это одно, а Тамбов-Москва совсем другое. По средней части России компании РТК и ТТК рулят всеми каналами. Дальний Восток - MPLS-сеть ДальСвязи.
    Или Вы ориентируетесь только на западный рынок?

  7. Квиринг Алексей Says:

    Добрый день !
    У нас готов механизм разделения трафика ресурсов и трафика канала управления. Для трафика ресурса можно использовать сети CDN. А трафик канала управления вполне может потянуть серверная площадка в Перми на первом этапе. Предложения в Москве и в Европе также будут рассмотрены.

  8. Blazkowicz Says:

    Почему не hessian?

Оставить комментарий

(Регистрация)

Powered by WP Hashcash