benchserver.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import random
  2. from six.moves.urllib.parse import urlencode
  3. from twisted.web.server import Site
  4. from twisted.web.resource import Resource
  5. from twisted.internet import reactor
  6. class Root(Resource):
  7. isLeaf = True
  8. def getChild(self, name, request):
  9. return self
  10. def render(self, request):
  11. total = _getarg(request, b'total', 100, int)
  12. show = _getarg(request, b'show', 10, int)
  13. nlist = [random.randint(1, total) for _ in range(show)]
  14. request.write(b"<html><head></head><body>")
  15. args = request.args.copy()
  16. for nl in nlist:
  17. args['n'] = nl
  18. argstr = urlencode(args, doseq=True)
  19. request.write("<a href='/follow?{0}'>follow {1}</a><br>"
  20. .format(argstr, nl).encode('utf8'))
  21. request.write(b"</body></html>")
  22. return b''
  23. def _getarg(request, name, default=None, type=str):
  24. return type(request.args[name][0]) \
  25. if name in request.args else default
  26. if __name__ == '__main__':
  27. root = Root()
  28. factory = Site(root)
  29. httpPort = reactor.listenTCP(8998, Site(root))
  30. def _print_listening():
  31. httpHost = httpPort.getHost()
  32. print("Bench server at http://{}:{}".format(httpHost.host, httpHost.port))
  33. reactor.callWhenRunning(_print_listening)
  34. reactor.run()