webSocket 握手期间的错误意外响应代码:400

Posted

技术标签:

【中文标题】webSocket 握手期间的错误意外响应代码:400【英文标题】:Error during webSocket handshake unexpected response code: 400 【发布时间】:2018-04-10 05:15:51 【问题描述】:

我尝试使用socket.io 在我的node 应用程序中实现cluster。如果我不使用cluster,一切都运行良好。但是当我使用cluster 时,它会在客户端浏览器中出现以下错误。

WebSocket connection to 'ws://localhost:8000/socket.io/?EIO=3&transport=websocket&sid=Ff8LkaCbF5g92lKOAAAS' failed: Error during WebSocket 
socket.js:2 POST http://localhost:8000/socket.io/?EIO=3&transport=polling&t=MAjySbD&sid=Ff8LkaCbF5g92lKOAAAS 400 (Bad Request)

这里是 server.js

var http = require('http');
var app = require('../app');
cluster = module.exports = require('cluster');
const numCPUs = require('os').cpus().length;
var server = http.createServer(app);
io = module.exports = require('socket.io').listen(server, 
    pingTimeout: 7000,
    pingInterval: 10000
);
io.set("transports", ["xhr-polling","websocket","polling"]);
if(cluster.isMaster)
    for (let i = 0; i < numCPUs; i++) 
        cluster.fork();
    
    cluster.on('exit', (worker, code, signal) => 
        console.log(`worker $worker.process.pid died`);
    );

 else 
    var port = 8000;
    var  host = '0.0.0.0';
    server.listen(port,host,function()
        log('server is running on ' + host +':'+port);
    );

这里是client.js

var socket = io.connect('http://localhost:8000/dashboard',transports: ['websocket']); 

【问题讨论】:

您的服务器在哪个主机上运行? 是的服务器正在全局主机上运行。 在您的 clientJs 中,您将其连接到 localhost ,我认为这可能是问题 不,我认为这不是问题,因为我只是删除了集群及其工作。 【参考方案1】:

检查您是否在 express 上使用 express-status-monitor 作为中间件,这会导致 WebSocket 的第一次(请求)握手时的 http 调用失败,或者可能是代理 (nginx) 或类似的其他因素

查看here 了解有关此错误的更多详细信息

【讨论】:

非常感谢,您真是一位经验丰富的程序员……!

以上是关于webSocket 握手期间的错误意外响应代码:400的主要内容,如果未能解决你的问题,请参考以下文章

webSocket 握手期间的错误意外响应代码:400

Django:WebSocket 握手期间出错:意外的响应代码:500

Java Glassfish Spring Sockjs失败:WebSocket握手期间出错:意外的响应代码:500

WebSocket 握手期间出错:意外的响应代码:302

WebSocket 握手期间出错:意外的响应代码:500

Meteor:WebSocket 握手期间出错:意外响应代码:400