我已经做了相当多的阅读,试图解决这个问题,但我仍然坚持。我的问题是尝试使用socket.io客户端和flask_socket.io服务器端完成websocket握手。
我可以使用以下方式在本地计算机上运行烧瓶开发服务器:
app = Flask(__name__)
app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT'
socketio = SocketIO(app)
socketio.run(app)
...

如果我将chrome指向localhost:5000并按下我已链接的按钮以打开websocket它工作正常并且chrome网络选项卡显示状态101.
然而,在将代码上传到远程计算机并再次使用flask的开发服务器但将端口更改为80时,
socketio.run(app,host='0.0.0.0',port=80)

websocket握手停止工作并改为给出状态200。
WebSocket连接到' ws://example.com/socket.io/?EIO = 3& transport = websocket& sid = cfb1949b243b42578fe422782a0db359'失败:WebSocket握手期间出错:意外响应代码:200
现在,所有websocket消息都通过xhr轮询发送,而不是在websocket框架内发送。
我已经跟踪了我在google上找到的与此相关的所有指南,但没有成功。我之前使用的是nginx和gunicorn,并遵循建议更改nginx conf以允许升级到websockets,但这并没有解决问题。所以我简化了使用烧瓶开发服务器,但我仍然无法成功握手。
答案 0 :(得分:1)
我在https://nolanlawson.com/2013/05/31/web-sockets-with-socket-io-node-js-and-nginx-port-80-considered-harmful/#comment-85425发现类似问题后找到了解决方案。
事实证明,许多公共wifi网络在端口80上运行时会阻止websockets。但是端口443和8080通常不会被阻止。您可以找到从此网站阻止的端口:http://websocketstest.com/。我刚将websocket的地址从example.com移到example.com:8080。
答案 1 :(得分:0)
我遇到了类似的问题,但原因不同。使用NameList = []
Input = input("Enter the name you want to validate:\n").upper()
for Character in Input:
NameList.append(Character)
Output = "".join(NameList[::-1])
时,您必须安装flask-socketio
,否则它将使用gevent-websocket
,您将看到200个响应。因此,我对这个问题的解决方法就是公正。
long-polling