[whatwg] Workers feedback

Jonas Sicking jonas at sicking.cc
Fri Aug 8 12:10:50 PDT 2008


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



More information about the whatwg mailing list