Flask SocketIO + Apache

问题描述 投票:0回答:1

我已经成功创建了一个在eventlet服务器上运行的Flask-SocketIO应用程序。然后,我将该网页移至Apache Web服务器。我只是删除了myapp.py中呈现模板的部分,并将index.html文件放置在Apache的/ 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>

一切正常。但是,然后我阅读了Miguel对以下问题的回答:Using eventlet to manage socketio in Flask,它说使用Apache的Web服务器不是一个好主意。我不太了解Web服务器如何工作。我做错了吗?答案还说,Apache不支持Web套接字。那么我的应用程序如何运作?如果有人可以向我解释这件事,我将非常感谢。

apache flask flask-socketio
1个回答
0
投票

您的示例有效,因为您仅通过Apache提供HTML文件,但Flask-SocketIO服务器仍在端口5000上单独运行。

当前困难/不可能做的是使Socket.IO连接先通过Apache然后再到达服务器,这是大多数人所喜欢的。

您实际上正在运行两个Web服务器,HTML的端口80/443上为Apache,Python逻辑的端口5000上为Flask-SocketIO。

© www.soinside.com 2019 - 2024. All rights reserved.