ToSee the dawn 2023-07-13 00:54 采纳率: 33.3%
浏览 43

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,
这两个的程序是否在同一个内存空间中

  • 写回答

1条回答 默认 最新

  • 大师兄6668 Python领域新星创作者 2023-07-13 09:11
    关注

    整理了部分来自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流量可能是更好的选择,以实现更灵活和可扩展的部署方式。

    评论

报告相同问题?

问题事件

  • 创建了问题 7月13日

悬赏问题

  • ¥60 通过python批量对文件重新命名
  • ¥20 求一个手机号或者Wxid转微信号的工具
  • ¥20 msconfig开启安全引导后重启电脑黑屏
  • ¥15 对email表单做了一般邮箱正则校验,现在需要额外输入为hotmail或outlook、gmail时做特定邮箱校验,不符合提示出来。并且保证不影响其他正确的邮箱格式通过校验,通过不会提示。
  • ¥20 Win11,bitblocker密钥恢复失败
  • ¥15 stm32 cubemx配置sdram,初始化后无法读写sdram
  • ¥100 上位机到dtu再到485继电器模块 目前结束命令有百分之2左右概率执行失败求指导
  • ¥15 ifcopenshell库在vs2019下的配置
  • ¥15 whql认证的windows硬件开发者账号个人验证不匹配问题
  • ¥15 色彩分析仪sensor