Я уже создал 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'
)