server.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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
  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. @gen.coroutine
  30. def get(self):
  31. queries = int(self.get_argument("queries", 0))
  32. if queries == 0:
  33. random_id = random.randint(1, 10000)
  34. world = yield motor.Op(db.World.find_one, random_id)
  35. # Get first postion on arguments, and so first postion in mongo return
  36. world['id'] = world.pop('_id')
  37. response = json.dumps(world)
  38. else:
  39. worlds = []
  40. for i in xrange(int(queries)):
  41. random_id = random.randint(1, 10000)
  42. world = yield motor.Op(db.World.find_one, random_id)
  43. # Get first postion on arguments, and so first postion in mongo return
  44. world['id'] = world.pop('_id')
  45. worlds.append(world)
  46. response = json.dumps(worlds)
  47. self.set_header("Content-Type", "application/json; charset=UTF-8")
  48. self.write(response)
  49. application = tornado.web.Application([
  50. (r"/json", JsonSerializeTestHandler),
  51. (r"/plaintext", PlaintextHandler),
  52. (r"/db", QueryTestHandler),
  53. ])
  54. if __name__ == "__main__":
  55. tornado.options.parse_command_line()
  56. server = tornado.httpserver.HTTPServer(application)
  57. server.bind(options.port)
  58. server.start(0)
  59. db = motor.MotorClient(options.mongo).open_sync().hello_world
  60. tornado.ioloop.IOLoop.instance().start()