Re: Newbie question : client connection lost
Sebastien PASTOR <[email protected]>
| Newsgroups | gmane.comp.python.twisted.web |
|---|---|
| Message-ID | <20100511134635.GB7699@seblaptop> |
It looks to me that this is what i am doin ... I really might be doing something wrong here but can t see what. The only difference with the livejournal's code is that i am trying to run a blocking code so i am doing a threads.deferToThread instead of doing a callLater. To test the connection lost, client side i am disabling the wifi while the server is blocking (sleeping). At the end of the blocking code: request.write() and finish() are done as if the connection was available and my ErrCallBack is not called. I hope i am clear... in attachment the code i am using Thanks for your time Seb On Tue, May 11, 2010 at 12:54:40PM +0100, Phil Mayers wrote: > On 11/05/10 13:23, Sebastien PASTOR wrote: > > Thanks Phil, > > > > I managed to be notified when the connection is cleanly closed by the > > client (ie: browser is stop or close window). > > But i could not handle non-clean connection closure (ie: when wifi goes > > down client side for instance). request.finish() does not event raise > > any error. ... > > I am a bit stuck here. .. any ideas ? > > I'm not sure I follow. > > Have a look at this to make sure you're using it properly: > > http://jcalderone.livejournal.com/50890.html > > _______________________________________________ > Twisted-web mailing list > [email protected] > http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web _______________________________________________ Twisted-web mailing list [email protected] http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web
delay.py
(text/x-python, 1.1 KB)
from twisted.web import server, resource
from twisted.internet import reactor,threads
from twisted.python.util import println
from twisted.web.server import NOT_DONE_YET
class DelayedResource(resource.Resource):
isLeaf = True
def _responseFinished(self,d):
print "in response Finished ! " ,d
def _delayedRender(self, request):
from time import sleep
request.write("<html><body>Sorry to keep you waiting.</body></html>")
request.finish()
def error(self,err):
print "err " , err
def blockingError(self,err):
print "In blocking error"
def blockingProcess (self,request):
from time import sleep
print "Blocking ..."
sleep(30)
print "About to write"
request.write("In blocking handler")
request.finish()
print "wrote"
def render_GET(self, request):
d2=threads.deferToThread(self.blockingProcess,request)
d2.addErrback(self.blockingError)
d = request.notifyFinish()
d.addErrback(self.error)
return server.NOT_DONE_YET
site = server.Site(DelayedResource())
reactor.listenTCP(8080,site,interface="192.168.0.10")
reactor.run()