Flask -SocketIO Можно ли разместить данные на сервере flask, а также открыть сокет для ожидания тех же данных в том же сценарии? - PullRequest
0 голосов
/ 27 апреля 2020

Я уже создал flask сервер с python3, который запускает скрипты и публикует различные данные в URL. Я использую его для доступа к этим данным по http-запросу в Angular. Но я заметил, что некоторые запросы занимают слишком много времени, поэтому я не смог получить окончательный ответ. Тогда я решил использовать Flask -SocketIO для создания сокета, который сообщит мне, когда запрос завершится и смогу ли я получить доступ к данным. У меня вопрос, могу ли я сделать оба на том же сценарии? Могу ли я добавить создание сокета на свой серверный скрипт flask и получить доступ к ответу этого сокета?

Вот мой flask_server.py:

from flask import Flask, jsonify
from flask import Response, request
from flask_cors import CORS, cross_origin
import base64
import sys
import glob

from script1 import *
from script2 import *
from script3 import *
from script4 import *
from script5 import *

from tools import Parser
from tools.Logger import Logger
from tools.ReportService import ReportService
from tools.ReportService import ReportLevel

logger = Logger.getInstance().getLogger(__name__) 
app = Flask(__name__)

CORS(app)

@app.route("/api/")
def api_healthStatus():
    return jsonify('Welcome on the server')    

@app.route("/api/getDefs")
def api_getDefs():

    # Connexion
    logger.info("Connexion")
    ReportService.getInstance().addDataToReport(ReportLevel.NONE, "Serveur: getDefs", "Connexion")
    session = authService.authenticate()

    Defs = []
    isLogout = False

    try:
        # ...

        logger.info(str(len(Defs)))

        # Closing session
        logger.info("Closing")
        ReportService.getInstance().addDataToReport(ReportLevel.NONE, "Serveur: getDefs", "Fermeture")
        authService.logout(session)

        isLogout = True
        return jsonify({'Defs': Defs, "report": ReportService.getInstance().getReport()})

    except:
        logger.info("Unexpected error:", sys.exc_info()[0])
        ReportService.getInstance().addDataToReport(ReportLevel.CRITICAL, "Serveur: getDefs", str(sys.exc_info()[0]))

        if isLogout is not True:
            # Closing
            logger.info("Closing")
            ReportService.getInstance().addDataToReport(ReportLevel.NONE, "Serveur: getDefs", "")
            authService.logout(session)

        return jsonify({'Defs': [], "report": ReportService.getInstance().getReport()})

@app.route('/api/creationDef')
def api_creationDef():

    # Connexion
    logger.info("Connexion")
    ReportService.getInstance().addDataToReport(ReportLevel.NONE, "Serveur: creationDef", "Connexion")
    session = authService.authenticate()

    try:
        creationDef()

        # Closing
        logger.info("Closing")
        ReportService.getInstance().addDataToReport(ReportLevel.NONE, "Serveur: creationDef", "Closing")
        authService.logout(session)

        isLogout = True
        return jsonify({'response': 'Ok', "report": ReportService.getInstance().getReport()})

    except:
        logger.info("Unexpected error:", sys.exc_info()[0])
        ReportService.getInstance().addDataToReport(ReportLevel.CRITICAL, "Serveur: creationDef", str(sys.exc_info()[0]))

        if isLogout is not True:
            # Closing
            logger.info("Closing")
            ReportService.getInstance().addDataToReport(ReportLevel.NONE, "Serveur: creationDef", "Closing")
            authService.logout(session)

        return jsonify({'response': 'Error', "report": ReportService.getInstance().getReport()})

@app.route('/api/updateDef')
def api_updateDef():

    # Connexion
    logger.info("Connexion")
    ReportService.getInstance().addDataToReport(ReportLevel.NONE, "Serveur: updateDef", "Connexion")
    session = authService.authenticate()

    initialisation(session)

    isLogout = False

    try:
        # ...

        # Closing
        logger.info("Closing")
        ReportService.getInstance().addDataToReport(ReportLevel.NONE, "Serveur: updateDef", "Fermeture de la session ALM")
        authService.logout(session)

        isLogout = True
        return jsonify({'response': 'Ok', "report": ReportService.getInstance().getReport()})

    except:
        logger.info("Unexpected error:", sys.exc_info()[0])
        ReportService.getInstance().addDataToReport(ReportLevel.CRITICAL, "Serveur: updateDef", str(sys.exc_info()[0]))

        if isLogout is not True:
            # Closing
            logger.info("Closing")
            ReportService.getInstance().addDataToReport(ReportLevel.NONE, "Serveur: updateDef", "Closing")
            authService.logout(session)

        return jsonify({'response': 'Error', "report": ReportService.getInstance().getReport()})

if __name__ == '__main__':
    app.run(
        ssl_context=('ssl/cert.pem', 'ssl/key.pem'),
        port=ApiConfigService.getInstance().getPort(), 
        debug=True, 
        host='0.0.0.0'
    )
...