Сервер Flask-Socketio в Google Cloud app engine flex env

#angular #google-app-engine #flask #socket.io

#angular #google-app-engine #flask #socket.io

Вопрос:

Я хочу развернуть сервер flask socketio в App Engine. Это импорт и запуск сервера:

 from typing import List
from flask_socketio import SocketIO, join_room, leave_room, send, emit
from flask import Flask, render_template, request, session, url_for
import sys
import numpy as np
import random
import re
import itertools

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret-key'
socketio = SocketIO(app, cors_allowed_origins="*")

...

if __name__ == '__main__':
    socketio.run(app, port='8080', debug=True)  

Это мое приложение.yaml:

 runtime: python
env: flex
service: server

entrypoint: python3 main.py

runtime_config:
    python_version: 3

automatic_scaling:
    min_num_instances: 1
    max_num_instances: 2
  

Я использую angular в качестве клиента, и он подключается к этой строке:

 this.socket = io('https://my-server-url.appspot.com');
  

Когда я пытаюсь запустить приложение angular, оно говорит

 Access to XMLHttpRequest at 'https://server-url.appspot.com/socket.io/?EIO=3amp;transport=pollingamp;t=NJu9Zq7' from origin 'http://localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
  

Я также попытался установить для параметра cors_allowed_origins значение [], но это тоже не сработало.
Я также попытался установить привязку сеанса к true, и это тоже не сработало.

заголовок присутствует в запрошенном ресурсе.

Я не открывал URL-адрес сервера на другой вкладке, и я хочу, чтобы сервер работал в фоновом режиме.

Вы можете помочь? Спасибо

Ответ №1:

Исправлено. Я установил значение session_affinity true, а затем изменил значение entrypoint на:

 entrypoint: gunicorn -b :8080 -k eventlet main:app
  

App engine работает только с портом 8080.

Комментарии:

1. Привет, не могли бы вы объяснить эту eventlet часть… потому что, когда я использую его в своем приложении flask yaml, оно не будет развернуто.