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

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

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

Регистрация: Jan 2012
Сообщений: 836
По умолчанию Бинарные сокеты

http://www.flasher.ru/forum/blog.php?b=580
Почитал вот эту статью, т.к уже запарился с проблемой потери пакетов и пришел к выводу, что это из-за склеивания некоторых меседжей, что вполне наверно логично. Так вот. Кто реализовал чтение меседжей по этой статье, подскажите, я так понял надо со стороны сервера переводить нужную строку в байт массив, а потом отправлять его клиенту?

Старый 24.08.2015, 21:33
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 2  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Советую посмотреть в сторону готовых бинарных протоколов, а не изобретать свои велосипеды. Например google protobuf

Старый 25.08.2015, 10:09
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 3  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Я реализовал такой протокол:
<байт><два байта><тело>
1 - Код.
2 - Длина тела.
3 - Тело. (Может отсутствовать)

Реализовать такой протокол совсем не сложно. Можно пересылать всё что угодно, картинки, текст, музыку, нулевые байты. Пакет всегда будет гарантированно таким же, каким и был отправлен.
__________________
Дети не должны знать о своих родителях

Старый 25.08.2015, 15:34
Godwarlock вне форума Посмотреть профиль Отправить личное сообщение для Godwarlock Найти все сообщения от Godwarlock
  № 4  
Ответить с цитированием
Godwarlock

Регистрация: Jan 2012
Сообщений: 836
Спасибо всем)

Старый 25.08.2015, 18:02
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 5  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Советую посмотреть в сторону готовых бинарных протоколов, а не изобретать свои велосипеды. Например google protobuf
+
или же AMF3
__________________
return this...

Старый 26.08.2015, 12:52
Godwarlock вне форума Посмотреть профиль Отправить личное сообщение для Godwarlock Найти все сообщения от Godwarlock
  № 6  
Ответить с цитированием
Godwarlock

Регистрация: Jan 2012
Сообщений: 836
Код AS3:
// сейчас читаем длину...
        public static const READ_LENGTH:uint = 0;
        // сейчас читаем сообщение...
        public static const READ_MESSAGE:uint = 1;
		 // массив байтов сообщений
        private var _buffer:ByteArray = new ByteArray();
        // состояние чтения...
        private var _state:uint = this.READ_LENGTH;
        // последняя прочитанная длина...
        private var _length:int = 0;
Код AS3:
private function socketData(event:ProgressEvent):void
		{
 
			 // читаем данные
            this.readBytes(_buffer, _buffer.length, this.bytesAvailable);
            trace(_buffer);
            // читаем или длину или сообщение...
            switch(_state) {
                case READ_LENGTH:
                    readLength();
                    break;
 
                case READ_MESSAGE:
                    readMessage();
                    break;
            }
 
		}
 
		 // читаем длину пакета...
        private function readLength():void {
            // если в буфере меньше 4 байт - мы не можем прочитать длину...
            if(_buffer.length < _buffer.position + 4) return;
 
            // если мы тут, значит читаем длину...
            _length = _buffer.readInt();
 
            // изменяем состояние...
            _state = READ_MESSAGE;
            readMessage();
        }
 
        private function readMessage():void {
 
            if (_buffer.length < _buffer.position + _length)
			{
				return;
			}
 
            var user_message:String = _buffer.readUTFBytes(_length);
            if (_buffer.bytesAvailable == 0)
			{
				_buffer.clear();
			}
            var decodedMessage:Object = com.adobe.serialization.json.JSON.decode(user_message);
			getTypeMessage(decodedMessage);
            _state = READ_LENGTH;
        }
Столкнулся с такой и наверно последней проблемой. Пакеты приходят все, но т.к некоторые склеиваются, со следующего месаджа приходит остаток и он объединяется с тем, что в буфере в итоге получаем целое сообщение, которое должно было придти раньше. С сервера поступает две информации интервалом в 50мс. Но я заметил, что буфер стал переполняться и не очищаться. В итоге меньше чем через минуту начинаются лаги, потому что буфер становится переполненным, его размер _buffer.length становится всё больше и больше и никак не может очиститься в итоге. Подскажите решение, так то вроде всё что хотел сделано, но вот переполненный буфер уже форс мажор как говорится

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

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

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


 


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


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