【发布时间】:2020-03-14 15:32:42
【问题描述】:
我正在尝试在 Windows 计算机上托管一个 flask-socketio 服务器(目前仅用于学习目的,稍后将移至 Raspberry Pi)并且对烧瓶相当陌生。在尝试从本地网络外部访问服务器之前,一切都很顺利。
服务器正在使用以下代码运行,正如许多其他 StackOverflow 帖子所解释的那样:
if __name__ == '__main__':
socketio.run(app, debug=False, host='0.0.0.0', port=80)
我已正确转发端口,并且通过我的全局 IP、本地 (192.168.X.X) 地址或 localhost 在我自己的网络中(在 所有 端口上)可以看到服务器。如果服务器托管在端口 80 以外的任何端口上,外部用户也可以看到它,包括烧瓶默认值 5000。但是,如果我托管在端口 80 上,则外部什么都看不到。
我已经对端口 80 和 python 可执行文件的 windows 防火墙入站规则进行了广泛的试验。我无法排除的唯一原因是 Windows 10 阻止入站端口 80 连接的特定原因。机器上没有运行其他竞争服务器,python/Flask-SocketIO 在此处提到的任何设置/连接中都没有抛出错误。
问题: 有没有关于 Flask-SocketIO 或 Windows 系统的问题我根本找不到?我应该研究“链”的其他哪些部分来诊断这个?
【问题讨论】:
-
您的 ISP 可能会阻止端口 80 传入。
-
在 Unix 系统上,1024 以下的端口是有权限的,只能由具有管理员权限的帐户访问。不确定Windows是否相同,您可能想尝试在管理员帐户下运行以测试这一点。或者,您可以尝试另一个低端口,例如 81。如果 81 有效但 80 无效,那么我怀疑您的 ISP 阻止您托管 Web 服务器。
-
@v25,刚刚给他们打了电话,但没有发现任何有用的东西 (Cox)。
-
@Miguel 我已经运行了端口 79 和 81,并且两者都运行良好。这也符合 v25 的建议。我可能需要寻找其他选项来通过我的 isp 修复或补救此问题。
-
如果它是永久使用的,你应该考虑在 443 上运行 SSL,虽然 ISP 也可能会阻止它。您还可以查看应用程序
ngrok,它为您提供了一个临时公共 URL,包括 SSL,并将其映射回任何内部端口,但这对于临时设置可能更好;这最终取决于您的用例。
标签: python flask server network-programming flask-socketio