2014-10-31 92 views
14

Socket.io为的NodeJS似乎并不为WebSocket的服务器Socket.io - 失败:连接接收握手回应

出于某种原因,上班前关闭,socket.io总是回退到长轮询如果我强迫WebSocket的传输层,它就会因错误:

失败:收到握手回应

正确的端口是开放的前连接关闭。我使用socket.io中的chat example。 我在http://jmi.io:3000上设置了服务器。正如你可以看到,它与一个美丽的长轮询频道,但现在尝试从websocket客户端的websocket连接和...

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

我只有一个节点是单线程的,并且具有与在聊天示例回购中完全相同的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" 
    } 
} 

谢谢您的帮助

+0

你设法解决这个问题呢? – vlio20 2015-01-03 19:57:15

回答

26

我有相同的问题,因为我是“定义IO”两次。仔细检查你在代码中定义io的位置,确保你没有两次定义变量io。我在做什么错

例子:

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')); 
}); 
+3

在我的情况下,我在两个不同的地方打电话require('socket.io')(服务器) – OpenUserX03 2015-05-06 00:06:26

+2

该死!这也发生在我身上!谢谢你的答案。 – 2015-11-22 22:37:55

+1

在我的情况下,这是2个电话听,似乎有损我的连接。 – 2016-01-20 14:46:59

2

在我的情况下,问题是,我通过browser-sync

进行代理服务器:

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')); 
})); 

什么固定的问题示例

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

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

+0

真棒,这也是我的问题。 – 2017-10-03 23:17:37

0

稍微涉及到什么@Lucas克拉森说:我有以下几点:

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); 
相关问题