Socket.io – 失败:连接在收到握手响应之前closures

用于NodeJS的Socket.io似乎不能用作websocket服务器

出于某种原因,socket.io总是回退到长轮询,如果我强制websocket传输层,它会出错:

失败:连接在收到握手响应之前closures

正确的端口是开放的。 我正在使用来自socket.io的聊天示例 。 我在http://jmi.io:3000上设置了服务器。 正如你所看到的,它可以很好的与一个美丽的长轮询频道,但现在尝试websocket客户端的websocket连接和…

WebSocket连接到'ws:// jmi:3000 /'失败:连接在收到握手响应之前closures

我只有一个节点单线程并具有完全相同的package.json比聊天示例回购。

{ "name": "socket-chat-example", "version": "0.0.1", "description": "my first socket.io app", "dependencies": { "express": "4.3.1", "socket.io": "1.2.0" } } 

感谢您的帮助

我有完全相同的问题,因为我定义了两次“io”。 仔细检查你在代码中定义io的位置,确保你没有定义variablesio两次。

我做错了的例子:

 var server = require('http').createServer(app); var io = require('socket.io')(server); var io = require('socket.io').listen(server.listen(config.port, config.ip, function () { console.log('Express server listening on %d, in %s mode', config.port, app.get('env')); })); 

什么修复了这个问题的例子:

 var server = require('http').createServer(app); var io = require('socket.io')(server); server.listen(config.port, config.ip, function () { console.log('Express server listening on %d, in %s mode', config.port, app.get('env')); }); 

在我的情况下,问题是我通过browser-sync代理服务器

 browserSync({ //server: { // // src is included for use with sass source maps // baseDir: ['public', 'src'] //}, proxy: "localhost:4045", port: 4046 

所以这将失败,但是在生产中它工作正常。

与卢卡斯·克拉森(@Lucas Klaassen)的回答略有相关:我有以下几点:

 let express = require('express'); let app = express(); let http = require('http').Server(app); let io = require('socket.io')(http); // this is the culprit: app.listen(port); 

改变最后一行是固定的:

 http.listen(port);