![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Mar 2001
Адрес: msk
Сообщений: 1,416
|
может и правда, неск объектов одновременно пишут. Если так, то можно решить с помощью локал конекшна, хоть ето и чревато.
Чтобы не было чревато, я делал такую штуку: каждая флашка через flashVars получает айдишник в определенном диапазоне (например от 1 до 20) и айди браузера, с которого зашел юзер; и криейтит локал конекшн с именем name+id+browser. Потом опрашивает 19 остальных адресов (name+i+browser) на предмет присутствия держателя конекшна с сервером и с SO. Если держатель не отзывается - креейтит конекшн сама. Если отзывается - отбирает у него данные. Как-то так. Зачем? Если создать несколько LC с одинаковым именем, обычно всё умирает. Хотя плотно не тестировал.
__________________
#define true false //счастливой отладки, друзья |
|
|||||
|
Регистрация: Mar 2001
Адрес: msk
Сообщений: 1,416
|
Сам седня/вчера реализовывал эту схему. Есть подводный камушек: LC-клиенты отзываются на LC.send далеко не мгновенно. Поэтому интервал, по истечении которого считается, что держатель коннекшна с данными умер должен быть довольно значительным. Типа секунды. И делать первую проверку на предмет существования держателя конекшна следует в разных флешках с разными интервалами, иначе они все дернуться в один момент и будуть выхватывать конекшн друг у друга.
Примерно схема выглядит так: при старте приложения аппликуха ждет 100ms*id, где id - уникальный идентификатор флешки, полученный из flashVars. И только потом начинает шевеления. До конца схема не обкатана, но я тестировал на 10 копиях - багов не заметил. А. Да. Нашел мегакосяк. Даже два. Во-первых, каждый LC.send занимает примерно 30-40ms. Таким образом, проверка 30 LC-клиентов занимает не менее секунды. Что есть, зачастую, недопустимое ограничение. Ну и самый главный мегакосяк - поскольку мы всегда проверяем айдишники от 0 до 30 (условно), когда юзер закроет одну из страниц, необходимо сообщить серверу о том, что айдишник освобожден. Для этого (на данном этапе) планируется юзать js-event onBeforeUnload. Но это прокатит только для тех, у кого установлен js. Правда если вы выводите флешки js-ом, это вас не напугает -)
__________________
#define true false //счастливой отладки, друзья Последний раз редактировалось iNils; 22.06.2007 в 22:39. |
|
|||||
|
Всем большое спасибо
|
|
|||||
|
Регистрация: Mar 2001
Адрес: msk
Сообщений: 1,416
|
Тут недавно решили эту проблему. Поскольку проблема популярная, решил отписаться.
Решение: Дефайним имя мастер-локал-конекшна (держателя коннекшна с сервером) и при создании инстанса класса делаем LC.connect(master_name). Если получаем тру - значит теперь мы - мастер. Если фолс - значит криейтим slave с рандомным именем. После чего выполняем ключевую фичу - slave.send(master_name, 'register_on_master', my_slave_name). И включаем этого слейва в список слушателей на мастере. После чего остается только периодически чекать мастера тем же способом, а на мастере - отрубать умерших клиентов, которые вовремя не отметились. Аккуратно и незатратно. Всем привет -)
__________________
#define true false //счастливой отладки, друзья |
|
|||||
|
Ветеран форума
Регистрация: Jul 2006
Адрес: Грузия, Тбилиси
Сообщений: 2,675
|
Привет, спасибо)
|
![]() |
![]() |
Часовой пояс GMT +4, время: 12:14. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|