Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.09.2010, 20:54
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 1  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
По умолчанию Бинарный сокет, что лучше кушать и выплевывать?

Делаем игру, решили уйти прочь от всяких XMLSocket и работать с бинарным Socket`ом.
Делаем по принципу: 2 байта на команду (атака, сообщение в чат, пропуск хода и т.д.) - решили сделать с запасом, 2 байта на длину сообщения, далее идёт само сообщение.

Есть класс, который занимается "разговором с сервером". Вот сигнатура метода чтобы послать что-то на сервер:
Код AS3:
public function send(packet:uint, message:ByteArray):void {
При приёме, когда сообщение полностью пришло я отправляю SampleEvent с data, который ByteArray. В итоге я плююсь туда-сюда ByteArray, но сомневаюсь, что такой подход хорош.

Как бы сделали Вы?

Старый 25.09.2010, 00:03
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 2  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Я использую AMF или protoBuf
мессаджи запускаю на выполнение, каждый мессадж сам знает как ему выполняться (посмотри пример про protoBuf - это вызов item.changeModel).
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 25.09.2010 в 00:05.
Старый 25.09.2010, 01:30
mayakwd вне форума Посмотреть профиль Отправить личное сообщение для mayakwd Посетить домашнюю страницу mayakwd Найти все сообщения от mayakwd
  № 3  
Ответить с цитированием
mayakwd
 
Аватар для mayakwd

Регистрация: Jul 2008
Адрес: t:2, x: 0.76
Сообщений: 553
Отправить сообщение для mayakwd с помощью ICQ Отправить сообщение для mayakwd с помощью Skype™
у нас самописный протокол для передачи объектов. методы передачи json, amf + сжатые\несжатые.

работа идет через byteArray но в send отдаются просто объекты (удобнее работать)
скорость приемлемая.
__________________
Блог, Twitter
Брюзга.

Старый 25.09.2010, 10:55
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 4  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
@Котяра: интересная вещь) Но пока немного пугает сложность нормальной реализации, а не как у тебя запрос-ответ;

По поводу AMF думал, но ни разу не применял на практике. Я так понимаю туда сериализуется любой объект (кроме DO) и такой же объект приходит с сервера. Я только не очень понимаю эту магию, как что-то извне можно десериализовать в любой экземпляр любого класса, ну да ладно (про алиасы я знаю, я про сам алгоритм в ФП. Он меня порабощает)). Удобство здесь очевидно, а есть ли разница в объеме передаваемых данных, по сравнению с моим вариантом?


Последний раз редактировалось Psycho Tiger; 25.09.2010 в 10:57.
Старый 25.09.2010, 13:35
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 5  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
AMF передает наименьшее число данных, т.к. все данные кешируются как на клиенте, так и на сервере.
__________________
...вселенская грусть

Старый 25.09.2010, 14:07
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 6  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
@Котяра: интересная вещь) Но пока немного пугает сложность нормальной реализации, а не как у тебя запрос-ответ;
ну я немного расширил протокол - у меня как-раз и не запрос/ответ, а парсинг любых сообщений. Кроме того
есть реализация моего "расширенного PB" на c++.

Цитата:
По поводу AMF думал, но ни разу не применял на практике. Я так понимаю туда сериализуется любой объект (кроме DO) и такой же объект приходит с сервера. Я только не очень понимаю эту магию, как что-то извне можно десериализовать в любой экземпляр любого класса, ну да ладно (про алиасы я знаю, я про сам алгоритм в ФП. Он меня порабощает)).
Есть тулзы которые по as3 готовят java класс и наоборот. (см graniteDS) Что-то поднобное wvxwv писал на php.
Цитата:
Удобство здесь очевидно, а есть ли разница в объеме передаваемых данных, по сравнению с моим вариантом?
Я не совсем понял твой протокол. т.е. ты всего навсего передаёшь сообщение, которое потом всё равно надо как-то десериализовать. или это строка)
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 26.09.2010 в 02:27.
Старый 25.09.2010, 14:50
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 7  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
@Котяра: серверник демона на пхп пишет. Не подскажешь, в каком месте у wvxvw это можно найти? )

Цитата:
Я не совсем понял твой протокол. т.е. ты всего навсего передаёшь сообщение, которое потом всё равно надо как-то десериализовать. или это строка)
Ну исходили из гибкости использования. На каждую команду идёт свой парсинг.
Например, если 2 игрока подвинулись в точку x,y - то придёт пакет с ID=5 и будет парс его как номер игрока - координаты. Если ID=1, то это сообщение в чат. Ну как то так, в целом )

Старый 25.09.2010, 18:31
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 8  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Цитата:
На каждую команду идёт свой парсинг.
те же яйца — только в профиль.
Вы по сути изобретаете свой велосипед.
Я раньше тоже изобретал.
мол 2 байта - индекс для типа класса, а потом тело экземпляра, на который уже свой парсер по 1 2 байтам.
потом всё это согласовывать - писать доки итп.
нафик.
всё давно придумано до нас и на грабли понаступлено.
amf хорош, но немного избыточен
protoBuf - хорош, но немного не для системы сообщений.. причём для алиаса классов им оставалось то всего-ничего - вложенные месаджи поддерживаются.
Я этот шаг сделал. тесты по сравнеию с amf не делал, но приблизительно могу сказать: по времени сериализации pb быстрее нативного amf раза в 2-3. по длине кодировки раза в 2-10 ( зависит от структуры передаваемого класса - PB позволяет передавать неполные данные, которые на стороне AS3 преобразуется в дефолты, кроме того он реально короче. т.к. передаётся не имя поля а его битовый алиас.
Всё конечно в сравнении. если полями данных является строка, то выигрыш будет очень маленьким, а если набор интов/флоат - например для передачи текущих координат, то мой выбор -PB.
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 25.09.2010 в 18:35.
Старый 25.09.2010, 21:39
Crenth вне форума Посмотреть профиль Отправить личное сообщение для Crenth Найти все сообщения от Crenth
  № 9  
Ответить с цитированием
Crenth
[+1 19.06.10]
[+1 27.07.10]
 
Аватар для Crenth

Регистрация: Aug 2009
Адрес: UTC+2
Сообщений: 353
такие умные вещи говорите...

я пользую стандартный customClient от netconnection
сервер присылает объект, который парсить и не нужно.
Код AS3:
switch (object.do_what) {
   case do_it : do it; break;
   case dont_do_it : ok; dont do it; break
}
главное, что код получается читабельный и компактный
__________________
Trapatatupatupa

Старый 25.09.2010, 23:51
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 10  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
2Crenth - это мало отличается от json или xml.
.proto тем и удобны что можно на основе их генерить классы данных практически на любых я зыках. решили сменить сервак с явы на плюсы- ок, либо сделать сторонний модуль на питоне - нет проблем.
Единственный косяк "чистого" protoBuf, что они почему-то не декларируют основной класс сообщения, но это решается, как я уже писал.
То же самое и про AMF - очень хороший, но временами избыточен.
В общем резюмирую: используйте бинарный сокет и собственные форматы, только если РЕАЛЬНО нужно сокращать объём ПЕРЕДАВАЕМЫХ данных и вы уверены, что ваш формат меньше чем AMF и затраты на его де/сериализацию тоже меньше.
Иначе - достаточно XMLSocket или AMF/PB.
__________________
Отряд Котовскага

Создать новую тему Ответ Часовой пояс GMT +4, время: 19:59.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 19:59.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.