Re: [Zope3-dev] Zope 3 lacks Ajax capability?

2006-05-15 Thread Zachery Bir

On May 15, 2006, at 1:23 PM, Jeff Rush wrote:


Benji York wrote:

Jeff Rush wrote:
Just checking if I'm missing something -- with the removal of  
HTTP streaming/chunking in 3.2, this means that the async bi- 
directional persistent socket communications associated with Ajax  
is NOT possible at this time?
Don't know if it is or isn't, but that's a novel definition of the  
A in AJAX that I haven't seen before.


I got the definition from Wikipedia:
  http://en.wikipedia.org/wiki/AJAX
Ajax, shorthand for Asynchronous JavaScript+CSS+DOM 
+XMLHttpRequest, is a Web development technique for creating  
interactive web applications.


From the page of the guy that coined the name:
  http://www.adaptivepath.com/publications/essays/archives/000385.php
  The name is shorthand for Asynchronous JavaScript + XML.

The key points re Zope3 are:

(1) a piece of Javascript downloaded with a page request turns  
around and issues an HTTP GET back to Zope3 such that that  
connection is kept open indefinitely, and the thread within Zope3  
that is servicing that request hangs around and periodically shoves  
bits of data (XML, JSON, whatever) down that pipe that get acted  
upon by Javascript within the client's page.  This provides server  
= client communications via a brief REQUEST and a neverending  
RESPONSE chunked up into pieces representing operations run on the  
client.


(2) another piece of Javascript downloaded with a page request  
similarly turns around and issues an HTTP GET/PUT back to Zope3  
with a header to keep the connection open.  Over this pipe the  
client can issue conventional multiple REQUEST/RESPONSE cycles to  
invoke functions within the server, providing client = server  
communications.  However the trick re Zope3 is that the URL/view to  
which that request connects must be one that can rendevous with the  
thread or a piece of state associated with (1) above, so that the  
server and client have a meaningful basis on which to talk.


So far as I can see, Zope3 doesn't provide any way to (1) hang onto  
a thread that can send further response data at any time or (2)  
manage a rendevous with a thread/context of another HTTP request  
from the same browser.  I think I can implement (2) but (1) is  
harder until streaming is added back in.  #1 could also be  
implemented as some piece of context that is handed to an arbitrary  
request-servicing thread each time data becomes available to send  
to the client but that approach still needs some element that does  
computation within the server and then signals it has data ready to  
send to the client.


I think Benji's commenting on the fact that you're creating a  
synchronous connection when you hold it open like that.


FWIW, I've been using MochiKit's Async package for writing Zope 3  
apps with AJAX.


Zac

___
Zope3-dev mailing list
Zope3-dev@zope.org
Unsub: http://mail.zope.org/mailman/options/zope3-dev/archive%40mail-archive.com



Re: [Zope3-dev] Re: Zope 3 lacks Ajax capability?

2006-05-15 Thread Zachery Bir

On May 15, 2006, at 1:49 PM, Jeff Rush wrote:


Benji York wrote:

Zachery Bir wrote:
I think Benji's commenting on the fact that you're creating a   
synchronous connection when you hold it open like that.
Exactly.  As Jean-Marc noted, Jeff's talking more about  
streaming than asynchronicity (is that a word?).


Well the connection itself is synchronous but that data flowing  
over it is async in that the server can send something to the  
client at any time w/o regard to the usual REQUEST/RESPONSE cycle.   
I guess I didn't think of it as streaming because I wasn't sending  
a large quantity of data over the connection, just many small  
chunks representing Javascript fragments to be invoked within the  
client.


FWIW, I've been using MochiKit's Async package for writing Zope  
3  apps with AJAX.

MochiKit is one of life's little joys.
(And I'm not being sarcastic, ask hard to believe as that is.)


I looked at MochiKit and studied the Async package, but perhaps I  
didn't understand it.  I only saw ways for the client to sneak HTTP  
REQUESTSs to the server behind the user's back, but nothing for the  
server to reach out and shove something into the client whenever  
the server, not the client, decided it was time.  I'd rather not  
have the client polling the server for said data with HTTP REQUESTs.


Depends entirely on your application, I guess. Comet (the live  
connection) doesn't scale particularly well. It suits some  
applications quite nicely (e.g. small number of users). For other  
purposes, it's wholly unsuited. But that's not an indictment of Zope  
3's ability to deploy AJAX applications. Perhaps Comet apps, but not  
AJAX.


Zac

___
Zope3-dev mailing list
Zope3-dev@zope.org
Unsub: http://mail.zope.org/mailman/options/zope3-dev/archive%40mail-archive.com