【WEB服务器】flask 服务器

【背景】需求需要搭建HTTP服务器

【方案】使用flask 搭建简易HTTP服务器

复制代码
from flask import Flask, request, jsonify
from util.logger import flak_log

app = Flask(__name__)

@app.route('/user_requests_info', methods=['POST'])
def user_requests_info():
    data = request.get_json(force=True)
   
# 处理 JSON 解析异常
if data is None: return jsonify({'code': -1, 'msg': 'Invalid JSON'}), 400

   # 验证数据的完整性和有效性

     if not isinstance(data, dict) or not data.get('required_key'):
      return jsonify({'code': -2, 'msg': 'Invalid data'}), 400

    flak_log.info("用户请求接口: %s", data)
    if data:
        info_queue.put(data)

    response = {'code': 0,'msg': "success"}
    flak_log.info("用户请求接口响应: 200")
    return jsonify(response), 200

# 启动服务器
app.run(host='0.0.0.0', port=5117)
复制代码

在您提供的 Flask 路由处理函数 user_requests_info 中,存在一些潜在的异常场景以及可以进行优化的地方。以下是详细的异常场景分析和优化建议:

异常场景

  1. JSON 解析失败:
    • 如果客户端发送的不是有效的 JSON 数据,request.get_json() 将返回 None 或引发异常(取决于 force=True 是否被设置)。
  2. 数据为空:
    • 即使 request.get_json() 没有引发异常,返回的数据也可能为空字典 {} 或 None,这在逻辑上需要处理。
  3. 队列操作失败:
    • 如果 info_queue 是一个线程安全队列(如 queue.Queue),但在多线程环境中没有正确处理,可能会引发阻塞或异常。
    • 如果队列已满(如果有限制大小),put 操作可能失败。
  4. 日志记录失败:
    • 日志记录可能因为权限问题、磁盘空间不足或其他原因失败。
  5. 响应生成失败:
    • 在返回响应之前,如果 Flask 应用的其他部分(如中间件)出现问题,也可能导致异常。

优化建议

    1. 处理 JSON 解析异常:

      • 使用 request.get_json(force=True, silent=True) 可以避免在解析失败时抛出异常,而是返回 None。然后检查返回值是否为 None
      data = request.get_json(force=True, silent=True)
      if data is None:
          return jsonify({'code': -1, 'msg': 'Invalid JSON'}), 400

       

    2. 数据验证:

      • 在将数据放入队列之前,验证数据的完整性和有效性。
      if not isinstance(data, dict) or not data.get('required_key'):
          return jsonify({'code': -2, 'msg': 'Invalid data'}), 400

       

    3. 队列异常处理:

      • 捕获队列操作中可能发生的异常,并返回适当的错误信息。
      1 try:
      2     info_queue.put(data, block=False)  # 可以设置 block=False 以避免阻塞
      3 except queue.Full:
      4     return jsonify({'code': -3, 'msg': 'Queue is full'}), 503
      5 except Exception as e:
      6     flak_log.error("Failed to put data in queue: %s", str(e))
      7     return jsonify({'code': -4, 'msg': 'Internal server error'}), 500

       

    4. 日志记录增强:

      • 确保日志系统配置正确,捕获并记录所有重要事件和错误。
      • 使用异常处理来确保日志记录不会因异常而中断。
    5. 统一异常处理:

      • 使用 Flask 的错误处理机制来统一处理异常。
      1 try:
      2     info_queue.put(data, block=False)  # 可以设置 block=False 以避免阻塞
      3 except queue.Full:
      4     return jsonify({'code': -3, 'msg': 'Queue is full'}), 503
      5 except Exception as e:
      6     flak_log.error("Failed to put data in queue: %s", str(e))
      7     return jsonify({'code': -4, 'msg': 'Internal server error'}), 500

       

posted on   张凌赫_帅  阅读(16)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示