W3C home > Mailing lists > Public > whatwg@whatwg.org > September 2008

[whatwg] workers

From: Aaron Boodman <aa@google.com>
Date: Wed, 24 Sep 2008 20:38:53 +0200
Message-ID: <278fd46c0809241138l7153787ibee81ac262301263@mail.gmail.com>
On Wed, Sep 24, 2008 at 8:27 PM, Aaron Boodman <aa at google.com> wrote:
> In the current design, there are three separate mechanisms to connect
> to and communicate with a worker:
>
> a) DedicatedWorker::sendMessage() + DedicatedWorkerGlobalScope::onmessage
>
> b) DedicatedWorker::startConversation() + DedicatedWorkerGlobalScope::onmessage
>
> c) new SharedWorker() + SharedWorkerGlobalScope::onconnect
>
> I would like to combine all of these into one common mechanism:

I spoke with Jonas on IRC today:
http://krijnhoetmer.nl/irc-logs/whatwg/20080924#l-379

Though I failed to convince him that we should simplify all these down
to just one mechanism, but he did support combining b) and c) with
something like "(my proposal - global onmessage) +
DedicatedWorker::sendMessage + DedicatedWorkerGlobalScope::onmessage".

That would look like this:

OUTSIDE

interface MessagePort {
 EventListener onmessage;
 EventListener onclose;
 void sendMessage(String message);
}

interface Worker {
 EventListener onload;  // informative only, you can sendMessage
before this happens
 EventListener onerror;  // only load errors, not script errors at runtime
 Port connect();
};

interface DedicatedWorker : Worker {
 void close();
 void sendMessage(String message);
};

INSIDE

interface WorkerContext {
 EventListener onclose;
 EventListener onconnect;  // fired each time connect() is called on a
corresponding Worker object

 readonly String name;
 void close();

 // + all the utils stuffs
};

interface DedicatedWorkerContext : WorkerContext {
  EventListener onmessage; // fires when someone calls
DedicatedWorker::sendMessage()
};

EXAMPLE SIMPLE USAGE

// outer
var worker = new Worker("foo.js");
worker.onmessage = function(e) {
  alert(e.message);
}
worker.sendMessage("hi!");

// inner
self.onmessage = function(e) {
  self.sendMessage("bye");
}

EXAMPLE LESS SIMPLE USAGE

// outer
var worker = new Worker("foo.js");
var port = worker.connect();
port.onmessage = function(e) {
  alert(e.message);
}
port.sendMessage("hi!");

// inner
self.onconnect = function(e) {
  e.port.onmessage = function() {
    e.port.sendMessage("bye");
  }
}

- a
Received on Wednesday, 24 September 2008 11:38:53 UTC

This archive was generated by hypermail 2.4.0 : Wednesday, 22 January 2020 16:59:05 UTC