- From: Jonas Sicking <jonas@sicking.cc>
- Date: Mon, 14 Oct 2013 02:58:04 -0700
- To: David Rajchenbach-Teller <dteller@mozilla.com>
- Cc: Webapps WG <public-webapps@w3.org>
On Mon, Oct 14, 2013 at 2:33 AM, David Rajchenbach-Teller <dteller@mozilla.com> wrote: > Let me introduce the first sketch of a variant. The general idea is to > add a |postSyncMessage| > > We extend DedicatedWorkerGlobalScope and MessageEvent as follows: > > interface DedicatedWorkerGlobalScope : WorkerGlobalScope { > void postMessage(any message, optional sequence<Transferable> transfer); > any postSyncMessage(any message, optional sequence<Transferable> > transfer); > }; > > interface SyncMessageEvent : MessageEvent { > void reply(optional any message, optional sequence<Transferable> > transfer); > }; This API was suggested by Olli way up in this thread. It has a few downsides: 1. It only allows a single synchronous message channel. That means that if you have several libraries that all need synchronous communication with the parent they have to coordinate on some way to distinguish each others messages. The fact that Gecko hasn't had MessageChannel support has resulted in the same problem for asynchronous communication and that has been a big headache for developers. 2. It doesn't support "streaming" return values. I.e. you can't send multiple return values from a single postSyncMessage call. 3. It doesn't allow direct synchronous communication between a worker and the workers "grand parent". Everything single message has to be individually routed through the parent. 4. What happens if you have multiple eventlisteners in the parent and several of them call .reply()? I wouldn't say that all of these are killer issues. I do think the first one is though. And the other three are clearly downsides. All in all I think the added complexity in the later proposal is worth it. / Jonas
Received on Monday, 14 October 2013 09:59:02 UTC