吃瓜的末路 2024-02-27 15:33 采纳率: 0%
浏览 51

flask响应前端的中断网络请求

我使用android studio写了一个app,后端使用flask写了一个api,用于传递json数据。
我要实现的功能是,app退出页面后取消网络请求,同时后端知道前端已取消,于是停止相关操作,停止响应。
app发出网络请求需要套一个线程,因此中断请求可以直接使用thread.interrupt()。
但是我不了解flask如何知道前端取消了网络请求然后停止响应的方法。


@app.route('/api/kanmeitu/search', methods=['GET'])
def index():
    """
    url http://localhost:8000/search?keyboard={}&search_id={}&page={}
    """
    keyboard = request.args.get('keyboard')
    search_id = request.args.get('search_id')
    page = request.args.get('page')
    print(keyboard, search_id)
    if keyboard == "":
        keyboard = None
    if search_id == "":
        search_id = None
    return pic_package_search.pic_package_search(keyboard=keyboard, search_id=search_id, page=page)

如代码所示,当请求接口时会返回pic_package_search函数的json数据,我不知道应该怎么中断响应。

  • 写回答

3条回答 默认 最新

  • GISer Liu 2024-02-27 15:34
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    要实现前端取消网络请求后,Flask能够停止响应的功能,可以考虑使用WebSocket或者HTTP长连接等技术。这样一旦前端取消了请求,可以通过WebSocket或者长连接向后端发送一个取消请求的信号,后端收到信号后停止响应。
    下面是一个使用WebSocket的简单示例:

    1. 首先,前端在取消请求时,通过WebSocket向后端发送一个取消请求的消息。
    2. 后端在收到取消请求后,停止相应的操作,并且关闭与前端的WebSocket连接。
      下面是一个简单的示例代码:
      前端(Android Studio)部分:
      javaCopy code
      // 使用WebSocket发送取消请求
      WebSocket ws = new WebSocket("ws://your_server_endpoint");
      ws.send("cancel_request");
      
      后端(Flask)部分:
      pythonCopy code
      from flask import Flask, request
      from flask_sockets import Sockets
      app = Flask(__name__)
      sockets = Sockets(app)
      @sockets.route('/cancel')
      def cancel(ws):
      while not ws.closed:
      message = ws.receive()
      if message == "cancel_request":
      # 停止相应的操作
      # 关闭WebSocket连接
      ws.close()
      break
      if __name__ == '__main__':
      from gevent import pywsgi
      from geventwebsocket.handler import WebSocketHandler
      server = pywsgi.WSGIServer(('0.0.0.0', 5000), app, handler_class=WebSocketHandler)
      server.serve_forever()
      
      这样,当前端取消请求时,会通过WebSocket发送一个取消请求的消息到后端,后端收到消息后停止相应的操作并关闭WebSocket连接,从而停止响应。
      需要注意的是,这只是一个简单的示例,实际情况可能会更复杂,需要根据具体需求进行适当调整和扩展。

    如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订

    用户答题指南

    评论

报告相同问题?

问题事件

  • 创建了问题 2月27日