Клиент не может подключиться к flask -socketio серверу при рендеринге с другого маршрута flask [решено] - PullRequest
1 голос
/ 06 марта 2020

Я не могу найти причину, по которой мои клиенты не подключаются к серверу после перенаправления на новый flask view / route / html из индекса "/" (извините, если смогу но не уточняю подробности c, я новичок в веб-программировании, и это, вероятно, причина, по которой я не понимаю что-то, что может быть очень основополагающим c). Клиенты могут быть правильно подключены к socketio по маршруту "/", но не к другим. Я не добавил ни одного кода, так как считаю, что это скорее непонятная ситуация, но просто чтобы вы поняли, что мой проект основан на https://github.com/shanealynn/async_flask, просто добавьте новый маршрут, по которому клиент обращается к визуализированному шаблону, соединение с сокетом теряется и больше не инициируется. Я импортировал js / application. js в этот новый обработанный шаблон html, и я думаю, что все должно работать нормально, просто соединение не срабатывает. Каковы возможные источники ошибок, которые я должен искать?

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Спасибо за вашу помощь Qu1s. В конце я решил построить приложение как одностраничное приложение (SPA), требующее только один сокет, с React в качестве внешнего интерфейса, динамически генерирующего представления и подключающегося к приложению flask в качестве API.

0 голосов
/ 06 марта 2020

Вы должны использовать Flask -Login, чтобы ваши клиенты вошли в систему, например:

from flask import Flask, render_template, redirect, url_for
from flask_login import LoginManager, current_user, login_user, logout_user 


login_manager = LoginManager(app)
app = Flask(__name__)
socketio = SocketIO(app)


@login_manager.user_loader
def load_user(name):
    return name


@app.route('/login', methods=['GET', 'POST'])
def login():

    if request.method == 'POST':
        name = request.form['name']

        # will create session for user while he don't click on link '/logout' in html
        login_user(name, remember=True)
    return render_template('login.html')


@app.route('/logout', methods = ['GET', 'POST'])
@login_required
def logout():
    logout_user()
    return redirect(url_for('login'))


if __name__ == "__main__":

    app.secret_key = secret_key
    socketio.run(app, debug=True, host='localhost', port='8080')

После, если вам нужны разные комнаты, вы должны прочитать о join_room, оставлять_room в Flask PS: Кроме того, Flask просто используя потоки, вам не нужно создавать больше потоков

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...