flask-socketio 和 微信小程序 连接的坑 Error during WebSocket handshake: Unexpected response code: 400

本文解决了一个常见的WebSocket连接失败的问题,具体表现为错误代码400。文章指出,在使用Flask框架时,若采用默认启动方式会遇到该问题,而通过服务器启动则可以避免。文中提供了一种简便的解决方案,即通过加入wsgi中间件并使用特定的服务器启动Flask应用。

WebSocket connection to ‘wss://wyndem.tunnel.echomod.cn/socket.io/?EIO=3&transport=websocket’ failed: Error during WebSocket handshake: Unexpected response code: 400

这个错误,出现很头疼。最后查了快一天的资料。也还是没有用。

原因:

Flask如果用默认的启动方式,就会报404,如果使用服务器启动,那就可以连接成功。简单来说不支持默认方式启动,你可以用任何第三方中间件或者是专业的服务器来启动Flask框架

最简单的解决方式:

  #加入wsgi中间件
  app.wsgi_app = LighttpdCGIRootFix(app.wsgi_app)
  #启动flask
  io.run(app)
当出现 “WebSocket connection to 'ws://123.127.164.28:19996/ws/overviewOfTheSituation' failed: Error during WebSocket handshake: Unexpected response code: 200” 错误时,意味着在 WebSocket 握手阶段,客户端期望得到 101 状态码(表示协议切换),但却收到了 200 状态码(通常用于 HTTP 请求成功响应),这表明服务器可能没有正确处理 WebSocket 握手请求,而是将其当作普通 HTTP 请求处理。以下是可能的解决方案: #### 检查服务器端代码 确保服务器端代码正确处理 WebSocket 握手。同的服务器端技术有同的实现方式,以下是几种常见的示例: ##### Node.js + ws 库 ```javascript const WebSocket = require('ws'); const wss = new WebSocket.Server({ port: 19996 }); wss.on('connection', function connection(ws) { ws.on('message', function incoming(message) { console.log('received: %s', message); }); ws.send('Hello, client!'); }); ``` ##### Python + Flask-SocketIO ```python from flask import Flask from flask_socketio import SocketIO app = Flask(__name__) socketio = SocketIO(app) @socketio.on('connect') def handle_connect(): print('Client connected') @socketio.on('message') def handle_message(message): print('received message: ' + message) if __name__ == '__main__': socketio.run(app, host='123.127.164.28', port=19996) ``` #### 检查服务器配置 确保服务器配置没有将 WebSocket 请求重定向或当作普通 HTTP 请求处理。例如,在 Nginx 配置中,需要正确设置 WebSocket 代理: ```nginx server { listen 80; server_name your_domain; location /ws/ { proxy_pass http://123.127.164.28:19996; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; } } ``` #### 检查防火墙代理 确保防火墙代理没有阻止 WebSocket 连接,并且没有对 WebSocket 请求进行错误处理。需要确保防火墙允许 19996 端口的流量通过,并且代理配置正确。 #### 检查 URL 确保 URL 正确,没有拼写错误或多余的字符。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值