Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   as3 + сокет (http://www.flasher.ru/forum/showthread.php?t=137986)

manuscripti 27.03.2010 12:22

as3 + сокет
 
пишу as3 сокет клиента
сервер на java

подскажите как обычно для многопользовательской игры делают с помощью сокетов непрерывный обмен данными

я имею ввиду общий философский подход

то есть 10 раз в секунду от as3 идет запрос на сервер

или делается какое либо событие

или как то по другому?

Добавлено через 4 минуты
в частности если на java сервере происходит какое либо событие
то как as3 об этом узнает = постоянно опрашивая сервер
или будет брать данные по факту какого либо as3 события?

gloomyBrain 27.03.2010 13:21

Если что-то произошло на сервере - сервер должен отослать сообщение об этом флешке, и наоборот. Сокет-соединение непрерывно, по этому (в случае с java) нет необходимости что-то отсылать каждые 2 секунды. Только по событию. Правда в java нет такой модели событий как во flash, но сути это не меняет

Crenth 27.03.2010 13:52

Цитата:

Сообщение от manuscripti (Сообщение 896077)
пишу as3 сокет клиента
сервер на java
в частности если на java сервере происходит какое либо событие
то как as3 об этом узнает = постоянно опрашивая сервер
или будет брать данные по факту какого либо as3 события?

если в сокет чото упало, возникает событие. Если вы слушаете это событие, то узнаете первым о прибытии новых данных в сокет.
потому все, что нужно знать серверу, пихайте в сокет на клиенте
все, что нужно знать клиенту, пихайте в сокет на сервере

не пользуйте подход "сериализации" данных, передаваемых серверу или обратно, как это делает протокол AMF. Протокол был придуман голодным программистом и продан за 1 рупию голодному менеджеру

Лучше используйте заранее определенный перечень команд, которые кодируются одним-двумя байтами + пара байт для передачи длины сообщения + само сообщение. будет офигенцко быстро и правильно

etc 27.03.2010 13:56

Цитата:

Сообщение от Crenth (Сообщение 896103)
не пользуйте подход "сериализации" данных, передаваемых серверу или обратно, как это делает протокол AMF.

Т. е. сериализованные данные в командах передавать ну вообще не труъ?

manuscripti 27.03.2010 15:28

имеется ввиду не работать с xml данными, а работать числами
под числа привязать всю логику?

gloomyBrain 27.03.2010 15:35

Цитата:

"сериализации" данных, передаваемых серверу или обратно, как это делает протокол AMF
Цитата:

имеется ввиду не работать с xml данными
Ну, сериализация - это же не обязательно XML. Можно и в свой формат.

Crenth 27.03.2010 15:45

Если вы пишете свой сервер и юзаете свой сокет на АС3, то не гут пользовать AMF.
Если вы пользуетесь средствами АС3, то выбора нет - придется пользовать :)

Сериализация команды connect в AMF0 выглядит примерно так 0x03 0x00 0x07 'C' 'o' 'n' 'n' 'e' 'c' 't' .
т.е. байт, обозначающий тип данных + 2 байта длина данных + сами данные.
(плюс 12 байт заголовка к пакету)
Идею Коннекта можно передать на другую сторону меньшим числом байт.


Нормальный программер бы уложил все в 2 байта (1 байт тип данных=команда + код команды 1 байт) или в 3 байта (если бы хотел сделать запас на 65 тысяч команд)

придумайте свой протокол (это не сложно) и вперед.
Опишите все, что должен знать сервер о клиенте и наоборот. Каждой команде назначьте отдельное значение от 0 до 255 (или от 0 до 65535). В зависимости от команды (по вашей задумке) ее будет сопровождать некоторое количество данных (или не будет). Т.е. если например пришла команда 0x01, а мы знаем что за этой командой не должно быть данных, стало быть следующий байт в сокете - новая команда :)
Если команду сопровождает N байт, то за кодом команды пишем 2 байта - длина данных, затем сами данные.
И так далее

помните, что некоторые дискретные весчи удобно передавать битами. например, если принять, что единица в нулевом бите означает движение вправо, а единица в первом бите означает движение вверх, то число 0х03 будет означать движение вправо вверх

когда разрабатываете клиент-серверную технологию, не думайте, что у всех мегабитный анлим. Думайте о людях, экономьте их трафик и процессорное время :)

manuscripti 27.03.2010 15:49

а какая организация команд на as3 будет слушать сокет?
как это будет выглядеть?

Crenth 27.03.2010 15:58

тут все подробно описано
http://help.adobe.com/ru_RU/ActionSc...0204-7cf7.html

etc 27.03.2010 20:27

Crenth, это всё понятно, непонятно только, причем тут вообще сериализация. Сериализовать можно с тем же успехом и в байтики.


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

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