python - 如何停止 flask_socketio 设置 SO_REUSEPORT?
问题描述
如果我这样做,那么端口 8080 将被独占绑定并且尝试运行另一个实例将失败:
from flask import Flask
flask_app = Flask(__name__)
flask_app.run(port=8080)
如果我这样做,则SO_REUSEPORT
设置了套接字选项,这意味着可以使用端口 8080 启动多个实例:
from flask import Flask
from flask_socketio import SocketIO
flask_app = Flask(__name__)
sio = SocketIO(flask_app)
sio.run(app=flask_app, port=8080)
这种SO_REUSEPORT
套接字选项行为对于我的用例来说确实是相当不受欢迎的。有谁知道我怎么能阻止这个?
解决方案
我调查了一下,eventlet.listen
确实有一个未记录的reuse_port
参数。
flask_socketio
维护者不想支持调用的服务器特定选项,SocketIO.run
所以解决方案只能是在没有SocketIO.run
. sio.run(app=flask_app, port=8080)
没有 SSL 和错误处理但使用reuse_port
我需要的参数的 eventlet 特定替换将是:
addresses = eventlet.green.socket.getaddrinfo('127.0.0.1', 8080)
sock = eventlet.listen(
addresses[0][4],
addresses[0][0],
reuse_port=False,
)
eventlet.wsgi.server(sock, flask_app)
推荐阅读
- java - 如何在我的 antlr4 语法中实现将写入域但不耦合域服务的方法?
- python - 如何在否定的lookbehind catch term regex之间捕获未知数量的单词?
- html - CSS 'overflow-wrap' 在 React.js 中不起作用
- sql - 产品与库存和用户之间的关系
- javascript - svelte onMount() 触发后 Stripe Elements card.mount 函数错误
- c++ - 在 C++ 中初始化向量映射的最有效方法
- android - 片段中的 DateRngePicker
- php - 用一个按钮在表单旁边提交图像
- laravel - 两个表之间的 Laravel 外键
- openpyxl - 使用 openpyxl 添加图表时,“builtin_function_or_method”类型的参数不可迭代