Flask SocketIO + Apache - PullRequest
       8

Flask SocketIO + Apache

0 голосов
/ 03 апреля 2020

Я успешно создал приложение Flask -SocketIO, которое работает на сервере событий. Затем я переместил веб-страницу на Apache веб-сервер. Я просто удалил часть myapp.py, в которой отображался шаблон, и поместил файл index. html в каталог Apache s / www/html. Вот код:

myapp.py:

from flask import Flask
from flask_socketio import SocketIO, emit

import eventlet
eventlet.monkey_patch()

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
io = SocketIO(app, cors_allowed_origins="http://localhost")

clients = []

@io.on('connected')
def connected():
    clients.append(request.sid)
    print("client connected")
    print(request.sid)

@io.on('disconnect')
def disconnect():
    clients.remove(request.sid)
    print("client disconnected")
    print(request.sid)

if __name__ == '__main__':
    io.run(app, host='localhost', port=5000)

index. html:

<html>
<br>

<head>
   <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
   <script src="//cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js" integrity="sha256-yr4fRk/GU1ehYJPAs8P4JlTgu0Hdsp4ZKrx8bDEDC3I=" crossorigin="anonymous"></script>
</head>

<br>

<body>

   <h2>HELLO</h2>

   <script>

      $("document").ready(function(){

         var socket = io.connect('http://localhost:5000');

         socket.on('connect', function() {
            socket.emit('connected');
         });

      });

   </script>

</body>

</html>

Все работает просто отлично. Но затем я прочитал ответ Мигеля на этот вопрос: Использование eventlet для управления socketio в Flask, в котором говорится, что использование веб-сервера Apache не очень хорошая идея. Я не очень хорошо понимаю, как работают веб-серверы. Что я сделал не так? В ответе также говорится, что Apache не поддерживает веб-сокеты. Почему же мое приложение работает вообще? Я буду очень благодарен, если кто-нибудь сможет мне это объяснить.

1 Ответ

0 голосов
/ 04 апреля 2020

Ваш пример работает, потому что вы обслуживаете файл HTML только через Apache, сервер Flask -SocketIO по-прежнему работает сам по себе на порту 5000.

То, что в настоящее время трудно / невозможно нужно сделать так, чтобы соединения Socket.IO проходили через Apache и затем на сервер, что предпочитает большинство людей.

Вы действительно используете два веб-сервера, Apache на портах 80/443 для вашего HTML и Flask -SocketIO через порт 5000 для вашего Python logi c.

...