server.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import random
  2. import sys
  3. import json
  4. import motor
  5. import tornado.ioloop
  6. import tornado.web
  7. from tornado import gen, escape
  8. import tornado.options
  9. from tornado.options import options
  10. import tornado.httpserver
  11. PY3 = False
  12. if sys.version_info[0] == 3:
  13. PY3 = True
  14. xrange = range
  15. tornado.options.define('port', default=8888, type=int, help="Server port")
  16. tornado.options.define('mongo', default='localhost', type=str, help="MongoDB host")
  17. class BaseHandler(tornado.web.RequestHandler):
  18. def compute_etag(self):
  19. return None
  20. class JsonSerializeTestHandler(BaseHandler):
  21. def get(self):
  22. obj = dict(message="Hello, World!")
  23. self.write(obj)
  24. class PlaintextHandler(BaseHandler):
  25. def get(self):
  26. self.set_header('Content-Type', 'text/plain')
  27. self.write(b"Hello, World!")
  28. class QueryTestHandler(BaseHandler):
  29. @tornado.web.asynchronous
  30. @gen.coroutine
  31. def get(self):
  32. queries = int(self.get_argument("queries", 0))
  33. if queries == 0:
  34. random_id = random.randint(1, 10000)
  35. world = yield motor.Op(db.World.find_one, random_id)
  36. # Get first postion on arguments, and so first postion in mongo return
  37. world['id'] = world.pop('_id')
  38. response = json.dumps(world)
  39. else:
  40. worlds = []
  41. for i in xrange(int(queries)):
  42. random_id = random.randint(1, 10000)
  43. world = yield motor.Op(db.World.find_one, random_id)
  44. # Get first postion on arguments, and so first postion in mongo return
  45. world['id'] = world.pop('_id')
  46. worlds.append(world)
  47. response = json.dumps(worlds)
  48. self.set_header("Content-Type", "application/json; charset=UTF-8")
  49. self.finish(response)
  50. application = tornado.web.Application([
  51. (r"/json", JsonSerializeTestHandler),
  52. (r"/plaintext", PlaintextHandler),
  53. (r"/db", QueryTestHandler),
  54. ])
  55. if __name__ == "__main__":
  56. tornado.options.parse_command_line()
  57. server = tornado.httpserver.HTTPServer(application)
  58. server.bind(options.port)
  59. server.start(0)
  60. db = motor.MotorClient(options.mongo).open_sync().hello_world
  61. tornado.ioloop.IOLoop.instance().start()