У меня есть расширение Firefox, которое имеет компонент XPCOM, написанный на C ++. Что было бы наилучшим способом асинхронной связи с этим компонентом таким образом, чтобы компонент мог «информировать» основное приложение о любых изменениях, а не только отвечать на вызовы.
Основная цель — иметь пользовательский интерфейс, который изменяет информацию из XPCOM, которая взаимодействует с внешней системой.
Связь должна быть асинхронной по требованию, поэтому проверять XPCOM каждые x секунд не вариант.
Я хочу знать, как должна выглядеть архитектура такой системы и какую технологию использовать (Workers / streaming / …). Решение должно работать на Firefox 3.5 — 4.0.
Буду признателен за любую помощь.
Вы можете, например, использовать наблюдатель сервис, если вы не хотите катать вещи самостоятельно. Это будет классический шаблон публикации-подписки. Ваш компонент будет использовать notifyObservers()
«публиковать» уведомления, которые затем может использовать код веб-интерфейса observe
после объявления процентов addObserver
,
Вместо этого вы можете сделать так, чтобы ваш компонент предоставлял свой собственный набор интерфейсов и методов для реализации собственного шаблона наблюдателя, аналогично тому, что nsIObserver
делает (или даже повторно nsIObserver
). Например. nsIPrefBranch
делает это уже: повторно использует nsIObserver
но не использует глобальный сервер наблюдателей, а вместо этого следит за самими наблюдателями.
Что бы вы ни использовали, вы должны убедитесь, что вы отправляете уведомления в главном потоке, в противном случае любой код Javascript будет освобожден.
Других решений пока нет …