Flask是否支持http和websocket部署在同一个端口

Flask是否支持http和websocket部署在同一个端口
我在pycharm中

from flask import Flask
from flask_socketio import SocketIO,emit

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key'
socketio = SocketIO(app)

@socketio.on('connect')
def handle_connect():
    emit("connect","success")

@app.route('/')
def index():
    return "success"

if __name__ == '__main__':
    socketio.run(app, host='0.0.0.0', port=8000)

是可以正常运行的,http和websocket都能启动
我查阅资料发现是因为pycharm存在内置的Werkzeug开发服务器,
是支持一个端口同时处理http和websocket的

WARNING: This is a development server.
 Do not use it in a production deployment. Use a production WSGI server instead.

但是使用生产环境时uwsgi或gunicore时,一个服务器只能监听一个端口且只能选择一个通信方式
是否可以做到http和websocket在同一个端口上

如果不可以,那我使用两个uwsgi在不同端口上一个运行app,另一个运行socketio,
这两个的程序是否在同一个内存空间中

整理了部分来自gpt的回答,你看一下是否能解决你的问题:
在生产环境中,通过uwsgi或gunicorn部署Flask应用时,一个服务器通常只能监听一个端口。这意味着如果您想要在同一个端口上同时支持HTTP和WebSocket通信,需要使用其他工具或技术来实现。

一种常见的做法是使用反向代理服务器(如Nginx或Apache)来将HTTP和WebSocket流量分发到不同的后端服务器。您可以将HTTP流量转发给uwsgi或gunicorn运行的Flask应用,将WebSocket流量转发给单独运行的WebSocket服务器。这样,HTTP和WebSocket请求就可以通过同一个端口(例如80或443)进入反向代理服务器,并按照配置将其转发到正确的后端服务器上。

关于两个uwsgi实例是否在同一个内存空间中的问题:如果您在两个uwsgi实例中分别运行Flask应用和SocketIO服务器,并且它们在不同的端口上监听请求,那它们通常会在不同的进程中运行,因此它们拥有各自独立的内存空间。这意味着它们之间不能直接共享变量或状态。如果您的应用程序需要共享数据,您可以使用其他机制(例如数据库或消息队列)来实现数据传递和共享。

最好的解决方案取决于您的具体需求和环境设置。如果您只是在开发环境中进行测试,可以保持简单,分别运行Flask应用和SocketIO服务器。但在生产环境中,使用反向代理服务器来处理HTTP和WebSocket流量可能是更好的选择,以实现更灵活和可扩展的部署方式。