main.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import os
  2. from contextlib import asynccontextmanager
  3. from fastapi import FastAPI
  4. import asyncio
  5. from udp_server import start_udp_server
  6. from api import router
  7. import uvicorn
  8. import configparser
  9. import logging
  10. from fastapi.responses import HTMLResponse
  11. from fastapi.templating import Jinja2Templates
  12. from fastapi import Request
  13. os.makedirs("logs",exist_ok=True)
  14. logging.basicConfig(
  15. filename="logs/server.log",
  16. level=logging.INFO,
  17. format="%(asctime)s [%(levelname)s] %(message)s"
  18. )
  19. # @app.on_event("startup")
  20. # async def startup_event():
  21. # asyncio.create_task(start_tcp_server("0.0.0.0", 9000))
  22. # 读取配置
  23. config = configparser.ConfigParser()
  24. config.read("config.ini", encoding="utf-8")
  25. http_port = int(config["server"].get("http_port", 8000))
  26. udp_port = int(config["server"].get("udp_port", 8886))
  27. tcp_port = int(config["server"].get("tcp_port", 9000))
  28. @asynccontextmanager
  29. async def lifespan(app: FastAPI):
  30. # 程序启动时运行
  31. #tcp_task = asyncio.create_task(start_tcp_server("0.0.0.0", 9000))
  32. #udp_task = asyncio.create_task(start_udp_server("0.0.0.0",8886))
  33. udp_task = asyncio.create_task(start_udp_server("0.0.0.0", udp_port))
  34. yield # 这里暂停,直到程序退出
  35. # 程序关闭时运行(清理任务)
  36. #tcp_task.cancel()
  37. udp_task.cancel()
  38. # try:
  39. # await tcp_task
  40. # except asyncio.CancelledError:
  41. # pass
  42. try:
  43. await udp_task
  44. except asyncio.CancelledError:
  45. pass
  46. app = FastAPI(lifespan=lifespan) # 这里绑定 lifespan
  47. app.include_router(router)
  48. templates = Jinja2Templates(directory="templates")
  49. @app.get("/", response_class=HTMLResponse)
  50. async def read_root(request: Request):
  51. return templates.TemplateResponse("index.html", {"request": request})
  52. if __name__ == "__main__":
  53. uvicorn.run(app, host="0.0.0.0", port=8000)
  54. #uvicorn.run("main:app", host="0.0.0.0", port=8000) #, reload=True)