It *should* use Comet as the wave.js file calls:
dwr.engine.setActiveReverseAjax(true);
... which should tell DWR to use Comet rather than polling.
Plus DWR is configured in web.xml with:
<init-param>
<param-name>activeReverseAjaxEnabled</param-name>
<param-value>true</param-value>
</init-param>
For me, Reverse-Ajax is one thing, the communication mode is another.
DWR is configured for Reverse-Ajax - clear to me. But, my widgets
definitely are polling to receive updates from Wookie (and I haven't
touched the significant parts in web.xml, so I just use it as delivered
with Wookie). If I open Firebug I clearly see the polling requests.
Every interval [WOOKIE]/wookie/dwr/call/plainpoll/ReverseAjax.dwr is
called to see if there are new updates.
In my web.xml there are also the lines
<init-param>
<param-name>org.directwebremoting.extend.ServerLoadMonitor</param-name>
<param-value>org.directwebremoting.impl.PollingServerLoadMonitor</param-value>
</init-param>
which are telling DWR to use polling instead of, e.g. a long-held HTTP
response (aka Comet).
If I delete those lines Comet style is used and the communication is
really fast (to me as fast as Node.js in you video). Again checking with
Firebug I can see that now an HTTP response is held open. All this is
described in the URL you mentioned below (see Polling Mode section):
More info at: http://directwebremoting.org/dwr/reverse-ajax/configuration.html
I have set an interval of 2.5 sec for polling by inserting the following
lines:
<init-param>
<param-name>disconnectedTime</param-name>
<param-value>2500</param-value>
</init-param>
Default poll rate is 5 sec.
2. Running an additional two services is a pain, and shouldn't be done unless
it really is strictly necessary. For example, with the code I've developed you
end up running:
- Node.js
- Redis
- Jetty
- Derby
... with relational data stored in Derby and tuples stored in Redis. Its
certainly a more complex deployment than we have at present.
3. Integrating participants is less trivial than state data, and would not
necessarily have any performance benefit
4. The benefits may be entirely due to websockets vs comet, in which case a
websockets implementation in DWR would be the easiest path. However, I haven't
seen a lot of discussion of websockets on the DWR lists.
Alternatively, Jetty has WebSockets support as of V7.0.1. However, I'm not
aware of any implementation for Tomcat.
Note I'm not suggesting we commit the code now, so close to a release, but
perhaps immediately after the release?
With respect to performance issues, maybe we should make it a priority to do
some profiling for the next release?
Agreed, I'd be wary of jumping to conclusions until we've identified where
performance issues occur.
If we do add profiling we could do the node.js in a branch and compare results
before merge. That might help us see where poor Wookie performance is being
masked by improved node.js performance.
Sounds good to me.
Sent from my mobile device.
On 25 Oct 2010, at 09:07, "Scott Wilson (JIRA)"<[email protected]> wrote:
[
https://issues.apache.org/jira/browse/WOOKIE-155?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12924490#action_12924490
]
Scott Wilson commented on WOOKIE-155:
-------------------------------------
I built the experimental functionality into a "NodeWave" feature that can be
used instead of the existing DWR-based feature and tried it out with some widgets. I'm
not surprised that using Node.js+Redis+WebSockets was very, very fast (duh!) but am a bit
concerned that DWR+Comet is surprisingly slow.
I wonder which part of Wookie might have a performance issue? It could be any
one of Comet/DWR, Jetty, the Wookie server code itself, JPA or Derby.
Experimental setup for shared data using websockets, node.js and redis
----------------------------------------------------------------------
Key: WOOKIE-155
URL: https://issues.apache.org/jira/browse/WOOKIE-155
Project: Wookie
Issue Type: Improvement
Components: Server
Reporter: Scott Wilson
Priority: Minor
Attachments: chat_dwr_vid.swf, chat_node_vid.swf, wavenoderedis.zip
This is an experimental setup that simulates replacing the DWR-based
functionality of Wookie's Wave API implementation with one using Node.js,
WebSockets, and Redis. The key motivation behind this experiment is to see how
much more responsive Wookie shared state widgets can be using a fast Websockets
implementation instead of Comet on a typical Java server stack.
To try it out, you need to install Node.js and the SocketIO websockets
implementation. You also need to run a Redis server. This file contains the
server-side logic.
To run the example:
1. Start your redis server on the default port using:
./redis-server
2. In the folder you unzipped the code into, type:
node server.js
3. In your browser (Safari and Chrome work well) open each of the testx.html files. Test
and Test2 share the same SharedDataKey whereas Test3.html does not. Type in key:value
pairs in the text boxes to send deltas to the wave state, and see them updated in other
"widget instances".
Note the example is incomplete as it only handles state, not viewer or
participants
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.