2014-10-31 65 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); 
相關問題