Даже в определениях идиотизма встречается идиотизм.
Цитата:
Идиотизм — устаревшее название идиомы
Идиома в программировании — понятие близкое к понятию шаблона проектирования. Идиомы представляют собой шаблоны проектирования, учитывающие специфику конкретного языка программирования и потому не универсальные. Это хорошие решения проектирования для конкретного языка или программной платформы.
Идиома в программировании — понятие близкое к понятию шаблона проектирования. Идиомы представляют собой шаблоны проектирования, учитывающие специфику конкретного языка программирования и потому не универсальные. Это хорошие решения проектирования для конкретного языка или программной платформы.
Идиотизмы: Socket
для понимания материала необходимы следующие знания:
flash.net.Socket
Подключение к сокетам
ну вот за что флэшерам такие мучения? Socket, казалось, ну что можно сломать в таком примитивном классе? анннет.
и так.
1. мы пытаемся законектися.
2. допустим наш сервер лежит.
3. нам само сабой вываливается ioError.
4. мы, узнав о такой трагедии, расстраиваемся и отписываемся от всех событий.
5. получаем unhadled securityError, так как policy-file нам тоже не удалось получить.
замечательно! вот только с откуда я могу знать, что после ioError я 100% получу securityError? а если у меня на 843 порту ещё один демон болтается? мне на всегда события оставлять висеть? до здравствуют утечки?
исправленный класс Socket:
package blooddy.patch.net { import flash.events.ErrorEvent; import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.SecurityErrorEvent; import flash.net.Socket; /** * @author BlooDHounD * @version 1.0 * @playerversion Flash 9 * @langversion 3.0 */ public class Socket extends flash.net.Socket { //-------------------------------------------------------------------------- // // Constructor // //-------------------------------------------------------------------------- /** * @inheritDoc */ public function Socket(host:String=null, port:int=0.0) { super( host, port ); super.addEventListener( Event.CLOSE, this.handler_close, false, int.MAX_VALUE, true ); super.addEventListener( IOErrorEvent.IO_ERROR, this.handler_error, false, int.MAX_VALUE, true ); super.addEventListener( SecurityErrorEvent.SECURITY_ERROR, this.handler_error, false, int.MAX_VALUE, true ); } //-------------------------------------------------------------------------- // // Variables // //-------------------------------------------------------------------------- /** * @private */ private var _hasError:Boolean = false; //-------------------------------------------------------------------------- // // Overrided methods: Socket // //-------------------------------------------------------------------------- /** * @inheritDoc */ public override function connect(host:String, port:int):void { super.connect( host, port ); this._hasError = false; } /** * @inheritDoc */ public override function close():void { super.close(); this._hasError = true; } //-------------------------------------------------------------------------- // // Event handlers // //-------------------------------------------------------------------------- /** * @private */ private function handler_close(event:Event):void { this._hasError = true; } /** * @private */ private function handler_error(event:ErrorEvent):void { if ( this._hasError ) { // ошибка уже была. поэтому блокируем остальные event.stopImmediatePropagation(); } else { this._hasError = true; // надо оптисаться, что бы не мешать вызову исключения super.removeEventListener( event.type, this.handler_error ); if ( !super.hasEventListener( event.type ) ) { // если подписчиков нету, диспатчим ошибку, что бы вывалился unhadled securityError super.dispatchEvent( event ); } // подписываемся обратно super.addEventListener( event.type, this.handler_error, false, int.MAX_VALUE, true ); } } } }
Всего комментариев 60
Комментарии
14.04.2011 08:49 | |
Цитата:
проводник при этом занял 0.1% от времени ЦПЮ, а флеш - 30%
Цитата:
когда ЦПЮ работает в режиме сервера для компиляции - тогда числа будут совсем другими... Т.е. у нас есть ограничение по времени не связаное с рантаймом, предположим, пропускная способность шины, или записи на диск - они в любом случае медленнее обращений к памяти / ЦПЮ, поэтому, в "обычном" режиме мы, возможно, ничего и не заметим.
ЗЫ Еще раз пардон за офтоп. И да, кажись я понял Олега. Ему хочется такую "фиковину" в языке АС (я, конечно, утрирую): - которая типа ByteArray с его write/read методами, но не ByteArray, ибо он сильно ресурсы жрет. - которая заточена на работу с файлами/сокетами нативно. т.е. там write/read будут при исполнении в рантайме дергать очень быстро очень быстрые нативные фичи, и если это возможно, хотелось бы иметь доступ не просто к фичам, но в kernel mode при нужде (а она несомненно будет) вываливаться. - которая будет заточена под работу с огромными (а лучше с очень огромными) объемами данных. - вот. |
|
Обновил(-а) alexcon314 14.04.2011 в 10:49
|
14.04.2011 16:04 | |
Вот. Отлично.
Мое резюме: - у сокета/файлстрима есть нативный буфер который рефлектится в ас как ByteArray, рантайм обрабатывает этот буфер нативно же (ну, как может). Хочешь ты или нет, надо оно тебе или нет, ты работаешь в итоге только с ним, не с чем там больше работать. - твои IDataInput/IDataOutput - будет не что иное, как обертка над этим нативным буфером, т.е. дополнительные тормоза (все эти стейты, метаданные и прочий мусор, да?). См. так же п.1. - расширять тут нехрен и незачем, интерфейс имплеменить - ради бога. Впрочем, не настаиваю. - операцию копирования данных напрямую из одного буфера в другой невозможно сделать управляемой (прозрачной) при асинхронности потоков чтения/записи без промежуточного буфера и вот он не может быть нативным никак. - синхронные потоки = еще большие тормоза. - твой облом с выгрузкой логов - это, видимо, судьба. попробуй дампить логи из памяти без флеша, еслу уж невпротык. |
|
Обновил(-а) alexcon314 14.04.2011 в 16:15
|
15.04.2011 00:06 | |
я уже устал тебе повторять. для начала упадёт производительность.
|
15.04.2011 02:49 | |
олег. я устал. я ухожу ) извини, но это уже смешно.
|
15.04.2011 04:55 | |
я устал, я ухожуй.
|
15.04.2011 06:45 | |
Илюха, флудильня в другом месте)
|
15.04.2011 06:47 | |
судя по комментам ты ошибаешься
|
Последние записи от BlooDHounD
- Обновление blooddy_crypto.swc до версии 0.5.1 (31.03.2016)
- Кто не успел - тот опоздал (19.04.2011)
- Обновление blooddy_crypto.swc до версии 0.3.1 (29.11.2010)
- blooddy_crypto.swc теперь умеет JSON (13.10.2010)
- Загадочный CommaExpression (06.09.2010)