-
-
Save zed/cf1f475e0e65abfc5d58 to your computer and use it in GitHub Desktop.
http server that write the response in portions with an encreasing delay
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
"""Write response with an increasing delay. | |
Install twisted: | |
$ pip install twisted | |
Run: | |
$ python chunked-server.py | |
Get: | |
$ curl http://localhost:8880/ | |
Based on https://github.com/agiliq/so-starving/blob/master/twisted/app.py | |
""" | |
from twisted.internet import reactor, defer, task | |
from twisted.python import log | |
from twisted.web import resource, server | |
class ChunkedResource(resource.Resource): #NOTE: no relation to chunked-encoding | |
isLeaf = True | |
def render_GET(self, request): | |
d = defer.maybeDeferred(self._render_GET, request) | |
d.addCallbacks(request.write, request.processingFailed) | |
d.addBoth(self._finishRequest, request) | |
request.notifyFinish().addBoth(self._cancelRequest, request) | |
return server.NOT_DONE_YET | |
@defer.inlineCallbacks | |
def _render_GET(self, request): | |
request.write("""<!DOCTYPE html><html> | |
<title>Write response with an increasing delay.</title>""") | |
for i in range(1, 10): # delay each subsequent write by `i` seconds | |
yield task.deferLater(reactor, i, request.write, "<p>%s\n"%("."*i)) | |
defer.returnValue("</html>") | |
def _cancelRequest(self, unused, request): | |
request.finish = lambda: None | |
def _finishRequest(self, unused, request): | |
request.finish() | |
if __name__=="__main__": | |
import sys | |
log.startLogging(sys.stderr) | |
resource = ChunkedResource() | |
reactor.listenTCP(8880, server.Site(resource)) | |
reactor.run() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment