Websocket返回状态200而不是101(flask socket.io)

时间:2017-01-13 15:54:53

标签: javascript flask socket.io

我已经做了相当多的阅读,试图解决这个问题,但我仍然坚持。我的问题是尝试使用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,但这并没有解决问题。所以我简化了使用烧瓶开发服务器,但我仍然无法成功握手。

2 个答案:

答案 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