|
|
|||||
Регистрация: Jan 2012
Сообщений: 836
|
Бинарные сокеты
http://www.flasher.ru/forum/blog.php?b=580
Почитал вот эту статью, т.к уже запарился с проблемой потери пакетов и пришел к выводу, что это из-за склеивания некоторых меседжей, что вполне наверно логично. Так вот. Кто реализовал чтение меседжей по этой статье, подскажите, я так понял надо со стороны сервера переводить нужную строку в байт массив, а потом отправлять его клиенту? |
|
|||||
Я реализовал такой протокол:
<байт><два байта><тело> 1 - Код. 2 - Длина тела. 3 - Тело. (Может отсутствовать) Реализовать такой протокол совсем не сложно. Можно пересылать всё что угодно, картинки, текст, музыку, нулевые байты. Пакет всегда будет гарантированно таким же, каким и был отправлен.
__________________
Дети не должны знать о своих родителях |
|
|||||
Регистрация: Jan 2012
Сообщений: 836
|
Спасибо всем)
|
|
|||||
Регистрация: Jan 2012
Сообщений: 836
|
// сейчас читаем длину... 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; 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; } |
Часовой пояс GMT +4, время: 07:59. |
|
« Предыдущая тема | Следующая тема » |
|
|