backend_server.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. """
  2. backend_server.py - 后台服务器
  3. """
  4. import asyncio
  5. import os
  6. import threading
  7. import aiomysql
  8. import tornado.web
  9. from tornado.ioloop import IOLoop
  10. from tornado.platform.asyncio import AnyThreadEventLoopPolicy
  11. from service.handlers.handlers_for_charts import send_data
  12. from service.handlers.handlers_for_nav import IndexHandler
  13. from service.handlers.handlers_for_tables import EmpHandler
  14. from service.handlers.handlers_for_charts import ChartHandler
  15. async def connect_mysql():
  16. return await aiomysql.connect(
  17. host='120.77.222.217',
  18. port=3306,
  19. db='hrs',
  20. charset='utf8',
  21. use_unicode=True,
  22. user='root',
  23. password='123456',
  24. )
  25. def main():
  26. # Tornado 5开始使用线程必须指定事件循环的策略否则无法启动线程
  27. asyncio.set_event_loop_policy(AnyThreadEventLoopPolicy())
  28. # 启动通过WebSocket长连接发送数据的线程
  29. threading.Thread(target=send_data, daemon=True, args=(5, )).start()
  30. app = tornado.web.Application(
  31. handlers=[
  32. (r'/', IndexHandler),
  33. (r'/api/emps', EmpHandler),
  34. (r'/ws/charts', ChartHandler),
  35. ],
  36. template_path=os.path.join(os.path.dirname(__file__), 'templates'),
  37. static_path=os.path.join(os.path.dirname(__file__), 'assets'),
  38. cookie_secret='MWM2MzEyOWFlOWRiOWM2MGMzZThhYTk0ZDNlMDA0OTU=',
  39. mysql=IOLoop.current().run_sync(connect_mysql),
  40. debug=True
  41. )
  42. app.listen(8888)
  43. tornado.ioloop.IOLoop.current().start()
  44. if __name__ == '__main__':
  45. main()