Обмен данными между сервером и клиентом
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 и экономнее расходует сетевой трафик.

22.10.2007 в 23:59
а выложите ли на паюзание протокол?
или хоть пингпонг патыкать?
08.11.2007 в 18:21
Выложить здесь протокол значит открыть серьезную дыру в безопасности.
вот.
22.01.2008 в 19:09
SmivaL - в книге Б. Шнайера была приведена чья-то фраза утверждающая, что если Ваша безопасность основана на незнании злоумышленников, то Вы пропали.
Учитывая что Flash Decompiller выдаёт что-то более читаемое чем Hiew/IDA то фраза кажется резонной.
Вы так не считаете?
Плюс - http://bash.org.ru/quote/341286 :)
22.01.2008 в 21:00
На самом деле у нас нет боязни выложить исходники протокола. Я понимаю что безопасность на этом не построить. Просто смысла пока не вижу, если будет много заявок - то почему бы и нет.
23.01.2008 в 11:52
Здравствуйте! Я уже писал Вам на e-mail, но ответа так и не получил. Мне очень интересно где Вы будете размещать сервера с игрой? У себя в Перми, или в Москве? Если в Москве - будете арендовать или свои ставить? Если свои ставить - как предполагается менять свежесгоревший райзер/RAID-контроллер?
23.01.2008 в 11:55
Строго-говоря предыдущий вопрос к тому, что связь между клиентом и сервером - Тамбов-Пермь это одно, а Тамбов-Москва совсем другое. По средней части России компании РТК и ТТК рулят всеми каналами. Дальний Восток - MPLS-сеть ДальСвязи.
Или Вы ориентируетесь только на западный рынок?
23.01.2008 в 11:58
Добрый день !
У нас готов механизм разделения трафика ресурсов и трафика канала управления. Для трафика ресурса можно использовать сети CDN. А трафик канала управления вполне может потянуть серверная площадка в Перми на первом этапе. Предложения в Москве и в Европе также будут рассмотрены.
03.07.2009 в 19:01
Почему не hessian?