- From: Jonas Sicking <jonas@sicking.cc>
- Date: Fri, 08 Aug 2008 12:10:50 -0700
Ian Hickson wrote: > On Fri, 8 Aug 2008, Jonas Sicking wrote: >>>> (We might want to add an onconnect property to WorkerGlobalScope, >>>> but it doesn't seem strictly needed) >>> How else would you connect to a shared worker? >> That is done at an application level. For example: >> >> worker = createSharedWorker("foo", "bar.js"); >> worker.addEventListener("message", handler, false); >> worker.postMessage("wassup dude, i just connected"); > > How would the worker distinguish that from the original "parent" sending > the same message? Why would the original parent same the message twice? Of course applications following their own application level protocols is going to break themselves. >> Actually, it seems like onconnect as defined in the current spec has a >> race condition. The shared worker example does the following: >> >> var worker = createSharedWorker('worker.js', 'core'); >> function configure(event) { >> if (event.message.substr(0, 4) != 'cfg ') return; >> var name = event.message.substr(4).split(' ', 1); >> // update display to mention our name is name >> document.getElementsByTagName('h1')[0].textContent += ' ' + name; >> // no longer need this listener >> worker.port.removeEventListener('message', configure, false); >> } >> worker.port.addEventListener('message', configure, false); >> >> However what's to say that the 'connect' event hasn't fired inside the >> worker before the 'worker.port.addEventListener' line executes? > > Doesn't matter. MessagePorts queue up messages until they receiver either > sets onmessage or calls start(). (This is explained just below the > example.) > >> Note that there can already be other listeners to the port, so the port >> has been activated. > > The port only activates if you set onmessage or call start(). Calling > addEventListener() doesn't activate it. Ah, i missed the fact that calling createSheredWorker always created a new Worker object, even if one already existed. / Jonas
Received on Friday, 8 August 2008 12:10:50 UTC