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

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日

悬赏问题

  • ¥30 YOLO检测微调结果p为1
  • ¥20 求快手直播间榜单匿名采集ID用户名简单能学会的
  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题