[Twisted-web] livepage connection "timing out"/dying randomly

Robby Dermody robbyd at u20.org
Thu Oct 27 11:50:17 MDT 2005

Hey guys,

I seem to have a problem with client browsers to my guarded livepage 
application loosing their livepage connections. It seems that the guard 
session doesn’t expire, but the livepage system on the server side seems 
like it will loose track of the client’s nevow handle. This is under the 
Nevow 0.5.0 release, and it happens under both IE 6.0.x and Firefox 1.0.x.

Basically, my server app makes livepage calls to the client browser js 
via clientHandle.call() to reflect dynamically updated data as it 
happens… (maybe one call every 4 seconds). At this point I found this 
problem (that at some point these updates in the client would stop, 
while the server was still making the livepage call() invocations like 
everything was fine and dandy). The problem was that things just seemed 
to die, and I could find no error output showing why.

Well, in my search for a fix/error output, I added a js function on the 
client that calls server.handle('refreshSession()') every 120 seconds 
via the use of repeated setTimeout() calls. The corresponding 
handle_refreshSession() function on the server gets that client's 
session object and touch()es it.

This will start out working fine for usually a few hours (the session 
timeout is 1200 seconds currently), and the client will stay logged in. 
Then after some seemingly arbitrary amount of time, I will start getting 
the following errors, one set for each refreshSession() call:

 From the client side (firefox java console):

Error: syntax error
Source File:
Line: 155
Source Code:
<html><head><title>Exception</title></head><body><style type="text/css">

 From a glance at nevow_glue.js, it looks like the server returned an 
exception page to the client and nevow_clientToServerEvent() in 
nevow_glue.js didn’t like that when it tried to evaluate it as 
javascript code, or some kind of javascript result.

On the server side I get the following python exception:

---**** EXCEPTION START ****---
Traceback (most recent call last):
   File "/usr/lib/python2.4/site-packages/twisted/internet/defer.py", 
line 216, in addCallback
   File "/usr/lib/python2.4/site-packages/twisted/internet/defer.py", 
line 207, in addCallbacks
   File "/usr/lib/python2.4/site-packages/twisted/internet/defer.py", 
line 328, in _runCallbacks
     self.result = callback(self.result, *args, **kw)
   File "/usr/lib/python2.4/site-packages/nevow/appserver.py", line 308, 
in handleSegment
     return defer.maybeDeferred(
--- <exception caught here> ---
   File "/usr/lib/python2.4/site-packages/twisted/internet/defer.py", 
line 117, in maybeDeferred
     result = f(*args, **kw)
   File "/usr/lib/python2.4/site-packages/nevow/livepage.py", line 596, 
in locateChild
     client = self.clientFactory.clientHandles[handleId]
exceptions.KeyError: '2'

---****  EXCEPTION END  ****---

In this case, the key ‘2’ was the setting of the client’s 
“nevow_clientHandleID” variable. This will happen every time the client 
tries to make the call (e.g. every 120 seconds).

I think these two types of updates I’m doing (one where the server tries 
to call a js method on the client when its data is updated, and one 
where the client periodically “pings” the server) are both exposing the 
same error. The only difference is that the one where the client pings 
the server with the server.handle() call exposes some error messages of 
what may be going wrong.

Might I be forgetting to do something, or using livepage improperly? My 
goal is to make it so that, as long as a client’s browser is logged in 
and at my page, they will keep getting livepage events indefinitely.

Might the newest version from the repository fix this?

Thanks for any help,


More information about the Twisted-web mailing list