|
|
|||||
Регистрация: Jan 2008
Сообщений: 23
|
Не срабатывает LocalConnection
Вообщем был написан буфер между сервером и играми на флеше 8 и 9, который передает данные от сервера к игре и обратно.
Общение посредством LocalConnection. Работает все отлично, но вот беда - если данные очень быстро передаются, то первая часть проходит, а остальные теряются. Весь код писать не буду, но вот пример. Клиент-буфер: AVM_lc = new LocalConnection(); AVM_2c = new LocalConnection(); AVM_2c.allowDomain('*'); AVM_2c.client = this; AVM_2c.connect("_As2toAs3"); // всякая всячина private function parser(s:String):void { var xml:XML =new XML(s); node = xml.name().localName; if (node== "m") { AVM_lc.send("_As3toAs2", "messages", xml); } } //================== AVM_1c = new LocalConnection(); AVM_2c = new LocalConnection(); AVM_1c.allowDomain('*'); AVM_1c.client = this; AVM_1c.connect("_As3toAs2"); // тоже всякая всячина // Функция получение от клиента сообщение в ксмле public function messages(xml:XML):void { var number_cadr:String; // Номер кадра на карте var nodes:XML = new XML(); nodes = xml.children()[0]; // и так далее Ставить ограничение по времени на клиенте - нельзя, ибо игры быстрые, мультиплеерные, синхронизируются, как милисекунда на счету. У какого какие мысли? Может я что то не так сделал или это особенность LocalConnection? |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Особенность.
|
|
|||||
ветеран форума
|
В качестве обходного механизма попробуйте создать несколько экземпляров LocalConnection и слать по очереди в разные экземпляры, т к подобная проблема возникает из-за перегруженности конкретного соединения.
__________________
4am is time to rock |
|
|||||
стервочка (я мужик)
|
чем больше конекшинов создать тем тем медленние они буду работать все коннекшины работаю в одном потоке, поэтому все их сообщения выстраиваются в очередь. приблизительно передача одного сообщения занимает один кадр.
|
|
|||||
ветеран форума
|
Да, но при этом если мы передаем за кадр 4 сообщения по 4 соединениям - они дойдут. А вот если пихаем все в один LocalConnection - то сообщения могут теряться. Т е получаем либо более синхронные сообщения, но с риском потери, либо менее - но значительно меньше рискуя.
__________________
4am is time to rock |
|
|||||
стервочка (я мужик)
|
да пофигу на количество конекшинов обработка в одном потоке идёт. может потеряем мы конечно меньше, но вот толку от этого никакого при толстом потоке нам уже нужно будет думать не о милисикундах, а как бы это на десятых обработать
|
|
|||||
Регистрация: Jan 2008
Сообщений: 23
|
Всем спасибо. Скорее всего прийдется лавировать между несколькими потоками и создавать временной стек. И еще прийдется подтвеждать прием сообщений.
А все из за того, что из девятки нельзя напрямую обратиться в восьмерку... Еще раз спасибо |
|
|||||
стервочка (я мужик)
|
всё из-за того что такого быть не должно
|
|
|||||
Регистрация: Jan 2008
Сообщений: 23
|
2BloodDHounD
В смысле? Сокет охрененно быстрая штука, и если у нас на тесте в локале такое происходит, то нельзя исключать возможность и из глобала... Проверяли соединение через мобилу - сообщения терялись. Проблемма решилась временным стеком - все сообщения заносятся в массив, из которого по Timer выдираются в порядке стека сообщения и отправляются на игру. |
|
|||||
стервочка (я мужик)
|
пыпэц. а напрямую нельзя отправить "на игру"? открыть сокет в самой игре?
|
Часовой пояс GMT +4, время: 00:10. |
|
« Предыдущая тема | Следующая тема » |
|
|