<div dir="ltr">On Wed, Aug 20, 2008 at 5:36 PM, Ian Hickson <span dir="ltr">&lt;ian@hixie.ch&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
I&#39;ve received feedback from a number of people requesting a rethink to the<br>
API for creating and communicating with workers.<br>
<br>
Here is a skeleton of a new proposal. It makes the following changes:<br>
<br>
&nbsp;* Shared workers and dedicated workers get their own interfaces,<br>
 &nbsp; inheriting from a common base interface, both for the global scope<br>
 &nbsp; objects and for the objects returned when they are created.<br>
<br>
&nbsp;* Shared workers get a port per connection. Dedicated workers don&#39;t get a<br>
 &nbsp; port, but they have a convenience method on the worker and on the<br>
 &nbsp; worker&#39;s global object that allows for easy creation of ports to send<br>
 &nbsp; threaded messages (direct replies).<br>
<br>
&nbsp;* Uses constructors instead of factory methods to create workers.<br>
<br>
&nbsp;* Removes &#39;onload&#39; from the Worker objects.<br>
<br>
&nbsp;* Renamed &quot;onunload&quot; to &quot;onclose&quot; throughout.<br>
<br>
&nbsp;* Removes the &quot;closing&quot; boolean.<br>
<br>
&nbsp;* Adds a way to kill a dedicated worker.<br>
<br>
<br>
OUTSIDE<br>
<br>
// (abstract, never instantiated)<br>
[NoInterfaceObject] interface Worker {<br>
 &nbsp;attribute EventListener onerror; // invoked if the worker fails to start<br>
 &nbsp;attribute EventListener onclose; // invoked if the worker closes<br>
};<br>
<br>
interface DedicatedWorker : Worker {<br>
 &nbsp;void close(); // kills the worker immediately, without cleanup</blockquote><div><br>Is the shutdown sequence initiated by this method call different then the shutdown sequence initiated by a call to self.close() from within the worker itself?&nbsp; The comment hints that it is... if so why?<br>
&nbsp;<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
<br>
 &nbsp;// these all work the same as on MessagePorts:<br>
 &nbsp;attribute EventListener onmessage; // receives messages from the worker<br>
 &nbsp;boolean postMessage(in DOMString message);<br>
 &nbsp;boolean postMessage(in DOMString message, in MessagePort, port);<br>
 &nbsp;MessagePort startConversation(in DOMString message);<br>
};<br>
<br>
interface SharedWorker : Worker {<br>
 &nbsp;readonly attribute MessagePort port; // local end of channel to worker<br>
};<br>
<br>
<br>
INSIDE<br>
<br>
// (abstract, never instantiated)<br>
[NoInterfaceObject] interface WorkerGlobalScope {<br>
 &nbsp;void close();<br>
 &nbsp;attribute EventListener onclose;<br>
<br>
 &nbsp;readonly attribute WorkerGlobalScope self;<br>
 &nbsp;readonly attribute WorkerLocation location;<br>
 &nbsp;// also implements everything on WorkerUtils<br>
};<br>
<br>
[NoInterfaceObject] interface DedicatedWorkerGlobalScope : WorkerGlobalScope {<br>
 &nbsp;// these all work the same as on MessagePorts:<br>
 &nbsp;attribute EventListener onmessage; // receives messages from the owner<br>
 &nbsp;boolean postMessage(in DOMString message);<br>
 &nbsp;boolean postMessage(in DOMString message, in MessagePort, port);<br>
 &nbsp;MessagePort startConversation(in DOMString message);<br>
};<br>
<br>
[NoInterfaceObject] interface DedicatedWorkerGlobalScope : WorkerGlobalScope {<br>
 &nbsp;attribute EventListener onconnect; // called by createSharedWorker()<br>
 &nbsp;readonly attribute DOMString name;<br>
};<br>
<br>
<br>
CREATING WORKERS<br>
<br>
To created workes, use constructors:<br>
<br>
 &nbsp; var worker = new DedicatedWorker(url);<br>
 &nbsp; var service = new SharedWorker(name, url);<br>
</blockquote><div><br>
Is it possible for a worker (shared or dedicated) to reload itself?<br>&nbsp;<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
<br>
Comments? <br></blockquote><div><br>How do workers and appCaches interact?<br>&nbsp;<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><font color="#888888"><br>

--<br>
Ian Hickson &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; U+1047E &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;)\._.,--....,&#39;``. &nbsp; &nbsp;fL<br>
<a href="http://ln.hixie.ch/" target="_blank">http://ln.hixie.ch/</a> &nbsp; &nbsp; &nbsp; U+263A &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/, &nbsp; _.. \ &nbsp; _\ &nbsp;;`._ ,.<br>
Things that are impossible just take longer. &nbsp; `._.-(,_..&#39;--(,_..&#39;`-.;.&#39;<br>
</font></blockquote></div><br></div>