Web Workers in GWT

1,500 views
Skip to first unread message

cidylle0

unread,
Jul 29, 2011, 9:08:39 PM7/29/11
to Google Web Toolkit
Hello,

I am currently playing around with GWT and I would like to implement
some HTML5 features with it like web workers. In the GWT documentation
I see that it supports a couple HTML5 features but no Web Workers. Are
there any libraries out there that would implement web workers in
GWT ? Or can anybody point me to a simple tutorial ? I would
appreciate. Thanks.

Allahbaksh

unread,
Aug 1, 2011, 5:02:24 AM8/1/11
to Google Web Toolkit
HI,
Check gwt-ns project. I have personally not used it.
Regards,
Allahbaksh

cidylle0

unread,
Aug 1, 2011, 6:37:33 PM8/1/11
to Google Web Toolkit
Hi Allahbaksh.

I did run accross the gwt-ns you mentioned but I am having trouble
running the sample described. Can't seem to set it up right. The
documentation is very minimal and the project seems to have been
halted. Can anyone who has used web workers with GWT before help me
out or point me out to some JAR or tutorial out there ? I found
something called google Gears that seemed to have been doing something
very similar (worker pool) but it has recently been deprecated. Any
help would be appreciated. Thanks.

Chris Conroy

unread,
Aug 1, 2011, 6:54:05 PM8/1/11
to google-we...@googlegroups.com
You definitely don't want to use gears.

You can take a look at how SpeedTracer uses WebWorkers via a custom DedicatedWebWorker linker: http://code.google.com/p/speedtracer/source/browse/#svn%2Ftrunk%2Fsrc%2Fclient%2Fui%2Fsrc%2Fcom%2Fgoogle%2Fgwt%2Fwebworker%253Fstate%253Dopen

Note that you cannot reference $doc or $wnd in the webworker.

--
You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To post to this group, send email to google-we...@googlegroups.com.
To unsubscribe from this group, send email to google-web-tool...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.


cidylle0

unread,
Aug 1, 2011, 7:58:29 PM8/1/11
to Google Web Toolkit
Thank you for your input Chris.
Yes I have been looking at the code included in Speedtracer but
without documentation (and the fact that I am a novice GWT developer)
I am having a difficult time figuring out how to the webworker is
being set up and used in Speedtracer. There seems to be a module for
the webworker with various classes representing worker entry points
but I am not sure which would to implement and in what context. In the
xml files of the modules i did notice an <add-linker ...> tag which I
am assuming points to the module that represents the worker. Again, if
anyone could provide a few basic steps to make a simple web worker
work in GWT I would greatly appreciate.

On a general note, I am a bit surprised by the lack of support
available for web workers in gwt, when there is support for other
HTML5 features like local storage, canvas etc. Does anyone know why it
is the case ? Are people not interested in using multi-threading in
GWT or is GWT not a suitable tool for such an application ?


On Aug 1, 3:54 pm, Chris Conroy <con...@google.com> wrote:
> You definitely don't want to use gears.
>
> You can take a look at how SpeedTracer uses WebWorkers via a custom
> DedicatedWebWorker linker:http://code.google.com/p/speedtracer/source/browse/#svn%2Ftrunk%2Fsrc...
>
> Note that you cannot reference $doc or $wnd in the webworker.
>

Chris Conroy

unread,
Aug 2, 2011, 10:18:19 AM8/2/11
to google-we...@googlegroups.com
Within SpeedTracer take a look at the Breaky Worker infrastructure (used to validate the schema of records SpeedTracer receives from Chrome):

client/ui/src/com/google/speedtracer/...
breaky/BreakyWorker.gwt.xml
breaky/worker/BreakyWorker.java
client/model/BreakyWorkerHost.java

To get an idea of how all this stuff is wired up. The Worker Host lives in the normal GWT module side of things, and the BreakyWorker is a DedicatedWorkerEntryPoint responsible for initializing the worker. Since it's small, it also handles the handling of messages.

The BreakyWorker.gwt.xml module pulls in  our WebWorker definition and uses the DedicatedWorkerLinker.

cidylle0

unread,
Aug 2, 2011, 8:56:38 PM8/2/11
to Google Web Toolkit
Chris,
Thanks again for your pointers, they have been very helpful. Following
your advice I believe I managed to set up the proper configuration and
I feel I am very close to succeeding. So far I am simply trying to
test the set up by sending a message from the main module to the
worker, and have the worker send back the message then display it in
an alert window. As I attempt to do so with postMessage() methods I
run into an error I cannot seem to correct:

("worker bootstrap error" : "alert not defined" )

Do you have any idea what that error could be ? I have the error
whether i use simple strings or JSON objects in postMessage. I have
ran a couple searches and looked into the wc3 specs but to no avail.
Thank you.

OrNOt

unread,
Aug 4, 2011, 9:08:19 PM8/4/11
to Google Web Toolkit
Hi, Cidylle,
I wrote one example based on speed tracer 's web worker and
after some sort of struggling
make it run.

If you like , I can send the source code to you. It seems no
place to attach file here?


Regards.
OrNot

BTW: I also need your help if possible. I want to pass a canvas'
image array from front thread to worker,
in javascript, it seems easy by the event.data. But I don't know how
to pass it in Speed Tracer 's implementation.
If I understand right, it only passes string and double.

cidylle0

unread,
Aug 5, 2011, 2:01:00 PM8/5/11
to Google Web Toolkit
Hi OrNot,

Yes please if you could help out and let me take a look at your
project that would be great (cidy...@gmail.com). Thanks a lot.
As for passing a canvas image array it should be possible since it can
be done in JavaScript. The postMessage method in the SpeedTracer code
indeed does only have String and Double. Maybe you could modify the
speedtracer MessageHandler class and add a method for array passing.
Or would stringifying the canvas array be possible ?

OrNOt

unread,
Aug 6, 2011, 7:52:02 PM8/6/11
to Google Web Toolkit
Hi, Christian,
Yes,I have tried to modify the code to pass array. But it seems
impossible. The reason is not from speed tracer part but from GWT
internal implementation If I understand well. When you create a array
in GWT like this :

short[] dataArray = new short[100];

The GWT will translate it to a none native javascript array like
this:

this.m_shortArray = initDim(_3S_classLit, {22:1}, -1, 4, 1);


Once you want to pass your dataArray, an exception will be thrown
because

of clone error.

It seems Web worker only supports native array clone. I have tried
chrome and
firefox and getting the same error.

I don't know how to go further now. ;-( . Convert the array to
string might be a
solution but the performance will be bad for big array.


OrNot




On Aug 6, 2:01 am, cidylle0 <cidyl...@gmail.com> wrote:
> Hi OrNot,
>
> Yes please if you could help out and let me take a look at your
> project that would be great (cidyl...@gmail.com). Thanks a lot.
> > >worker, and have theworkersend back the message then display it in
> > > an alert window. As I attempt to do so with postMessage() methods I
> > > run into an error I cannot seem to correct:
>
> > > ("workerbootstrap error" : "alert not defined" )
>
> > > Do you have any idea what that error could be ? I have the error
> > > whether i use simple strings or JSON objects in postMessage. I have
> > > ran a couple searches and looked into the wc3 specs but to no avail.
> > > Thank you.
>
> > > On Aug 2, 10:18 am, Chris Conroy <con...@google.com> wrote:
>
> > > > Within SpeedTracer take a look at the BreakyWorkerinfrastructure (used to
> > > > validate the schema of records SpeedTracer receives from Chrome):
>
> > > > client/ui/src/com/google/speedtracer/...
> > > > breaky/BreakyWorker.gwt.xml
> > > > breaky/worker/BreakyWorker.java
> > > > client/model/BreakyWorkerHost.java
>
> > > > To get an idea of how all this stuff is wired up. TheWorkerHost lives in
> > > > the normal GWT module side of things, and the BreakyWorker is a
> > > > DedicatedWorkerEntryPoint responsible for initializing theworker. Since
> > > > it's small, it also handles the handling of messages.
>
> > > > The BreakyWorker.gwt.xml module pulls in  our WebWorker definition and uses
> > > > the DedicatedWorkerLinker.
>
> > > > On Mon, Aug 1, 2011 at 7:58 PM, cidylle0 <cidyl...@gmail.com> wrote:
> > > > > Thank you for your input Chris.
> > > > > Yes I have been looking at the code included in Speedtracer but
> > > > > without documentation (and the fact that I am a novice GWT developer)
> > > > > I am having a difficult time figuring out how to the webworker is
> > > > > being set up and used in Speedtracer. There seems to be a module for
> > > > > the webworker with various classes representingworkerentry points
> > > > > but I am not sure which would to implement and in what context. In the
> > > > > xml files of the modules i did notice an <add-linker ...> tag which I
> > > > > am assuming points to the module that represents theworker. Again, if
> > > > > anyone could provide a few basic steps to make a simplewebworker
> > > > > work in GWT I would greatly appreciate.
>
> > > > > On a general note, I am a bit surprised by the lack of support
> > > > > available forwebworkers in gwt, when there is support for other
> > > > > HTML5 features like local storage, canvas etc. Does anyone know why it
> > > > > is the case ? Are people not interested in using multi-threading in
> > > > > GWT or is GWT not a suitable tool for such an application ?
>
> > > > > On Aug 1, 3:54 pm, Chris Conroy <con...@google.com> wrote:
> > > > > > You definitely don't want to use gears.
>
> > > > > > You can take a look at how SpeedTracer uses WebWorkers via a custom
> > > > > > DedicatedWebWorker linker:
> > > > >http://code.google.com/p/speedtracer/source/browse/#svn%2Ftrunk%2Fsrc...
>
> > > > > > Note that you cannot reference $doc or $wnd in the webworker.
>
> > > > > > On Mon, Aug 1, 2011 at 6:37 PM, cidylle0 <cidyl...@gmail.com> wrote:
> > > > > > > Hi Allahbaksh.
>
> > > > > > > I did run accross the gwt-ns you mentioned but I am having trouble
> > > > > > > running the sample described. Can't seem to set it up right. The
> > > > > > > documentation is very minimal and the project seems to have been
> > > > > > > halted. Can anyone who has usedwebworkers with GWT before help me
> > > > > > > out or point me out to some JAR or tutorial out there ? I found
> > > > > > > something called google Gears that seemed to have been doing something
> > > > > > > very similar (workerpool) but it has recently been deprecated. Any
> > > > > > > help would be appreciated. Thanks.
>
> > > > > > > On Aug 1, 5:02 am, Allahbaksh <a.allahba...@gmail.com> wrote:
> > > > > > > > HI,
> > > > > > > > Check gwt-ns project. I have personally not used it.
> > > > > > > > Regards,
> > > > > > > > Allahbaksh
>
> > > > > > > > On Jul 30, 6:08 am, cidylle0 <cidyl...@gmail.com> wrote:
>
> > > > > > > > > Hello,
>
> > > > > > > > > I am currently playing around with GWT and I would like to
> > > > > implement
> > > > > > > > > some HTML5 features with it likewebworkers. In the GWT
> > > > > documentation
> > > > > > > > > I see that it supports a couple HTML5 features but noWebWorkers.
> > > > > Are
> > > > > > > > > there any libraries out there that would implementwebworkers in
> > > > > > > > > GWT ? Or can anybody point me to a simple tutorial ? I would
> > > > > > > > > appreciate. Thanks.
>
> > > > > > > --
> > > > > > > You received this message because you are subscribed to the Google
> > > > > Groups
> > > > > > > "GoogleWebToolkit" group.
> > > > > > > To post to this group, send email to
> > > > > google-we...@googlegroups.com.
> > > > > > > To unsubscribe from this group, send email to
> > > > > > > google-web-tool...@googlegroups.com.
> > > > > > > For more options, visit this group at
> > > > > > >http://groups.google.com/group/google-web-toolkit?hl=en.
>
> > > > > --
> > > > > You received this message because you are subscribed to the Google Groups
> > > > > "GoogleWebToolkit" group.

OrNOt

unread,
Aug 7, 2011, 3:59:39 AM8/7/11
to Google Web Toolkit
I get a workaround but no idea if it makes right sense.

Create a JSNI factory method to by pass the GWT like this

private final native short[] createShortArray(int length)
/*-{
var dataArray= new Array(length);
return dataArray;
}-*/;


Now in your GWT code, you can use it as below:

short[] myShortArray=createShortArray(100);

Now if you passMessage(myShortArray), it works.

In your worker side , you need a method like this:

public final native short[] getDataAsShortArray()
/*-{
return this.data;
}-*/;


Anybody can kindly confirm it ?

Thanks a lot.

OrNot

On Aug 7, 7:52 am, OrNOt <ornot2...@gmail.com> wrote:
> Hi, Christian,
>       Yes,I have tried to modify the code to pass array. But it seems
> impossible. The reason is not from speed tracer part but from GWT
> internal implementation If I understand well.  When you create a array
> in GWT like this :
>
>        short[] dataArray = new short[100];
>
> The GWT will translate it  to a none native javascript array  like
> this:
>
>       this.m_shortArray = initDim(_3S_classLit, {22:1}, -1, 4, 1);
>
> Once you want to pass your dataArray, an exception will be thrown
> because
>
> of clone error.
>
> It seemsWebworkeronly supports native array clone. I have tried

cidylle0

unread,
Aug 8, 2011, 7:07:10 PM8/8/11
to Google Web Toolkit
Ornot,

So I have used your sample code and tried to run the development mode
and send a simple echo message to the worker. When I run in Firefox, I
see the button being present but when I click on it nothing happens.
When I run in chrome, I see nothing blank page. So I did a GWT
compile, then open the html file in the war folder with firefox and it
worked. For chrome I had to deploy the war file to my apache server
and it worked.
Is that normal behavior ? The webworkers do not work during
development or debugging mode, only after we do a gwt compile ?

As for your workaround I think it should be working fine because you
are working with JSNI, thus working directly with javascript, gwt
shouldnt complain about it.
Reply all
Reply to author
Forward
0 new messages