2016-09-28 64 views
1

我嘗試了許多不同的npm web套接字庫(WebSocket,ws,express-ws和更多),並且在它們的每個人中我都有同樣的問題。當我嘗試發送websocket消息時,連接關閉。 我沒有問題接收messeges,只發送。Node.js中的Websocket連接在發送時關閉

這裏是使用Express和WS的某個庫的測試的一個簡單的例子: Node.js的側:

var server = require('http').createServer() 
 
    , url = require('url') 
 
    , WebSocketServer = require('ws').Server 
 
    , wss = new WebSocketServer({ server: server }) 
 
    , express = require('express') 
 
    , app = express() 
 
    , port = 8080 
 
    , fs = require('fs'); 
 

 
app.use(function (req, res) { 
 
    var index = fs.readFileSync('./interface/index.html'); 
 
    res.end(index); 
 
}); 
 

 
wss.on('connection', function connection(ws) { 
 
    var location = url.parse(ws.upgradeReq.url, true); 
 
    console.log('open ws'); 
 
    ws.on('message', function incoming(message) { 
 
    console.log('received: %s', message); 
 
    ws.send('test back'); 
 
    }); 
 

 
    ws.on('close', function() { 
 
    console.log('ws connection closed.'); 
 
    }) 
 
}); 
 

 
server.on('request', app); 
 
server.listen(port, function() { console.log('Listening on ' + server.address().port) });

和瀏覽器側(」 ./interface/index.html 「):

window.WebSocket = window.WebSocket || window.MozWebSocket; 
 
var port = 8080; 
 
var ip = window.location.hostname; 
 
var connection; 
 

 
connection = new WebSocket('ws://' + ip + ':' + port); 
 

 
connection.onopen = function() { 
 
    // connection is opened and ready to use 
 
    console.log('Web socket connection with', ip + ':' + port); 
 
    //sendQueue(msgQueue); 
 

 
}; 
 

 
connection.onerror = function (error) { 
 
    // an error occurred when sending/receiving data 
 
    console.log('Web socket erorr with', ip + ':' + port + ':', error); 
 
}; 
 

 
connection.onmessage = function (message) { 
 
    // try to decode json (I assume that each message from server is json) 
 
    console.log("Received ws"); 
 
    // handle incoming message 
 
}; 
 

 
connection.onclose = function(){ 
 
    console.log("Web socket connection lost."); 
 
}; 
 

 
function sendws() { 
 
    connection.send("test"); 
 
    console.log("sent ws"); 
 
    return false; 
 
}
<head> 
 
    <meta charset="utf-8"> 
 

 
    <title>Simple Web Socket test</title> 
 
    <!--<meta name="description" content="Simple Web Socket">--> 
 
    <meta name="author" content="Binoman"> 
 

 
    <link rel="stylesheet" href="css/styles.css?v=1.0"> 
 

 
    <!--[if lt IE 9]> 
 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.js"></script> 
 
    <![endif]--> 
 
</head> 
 

 
<body> 
 
    <button type="button" name="button" onclick="sendws()">Send</button> 
 
</body>

我不知道爲什麼會發生這種情況。我將Node.js更新爲6.7。 在Windows 10上運行。 我很感激幫助! 謝謝!

+1

您的客戶端代碼與服務器端相同。 –

+0

粘貼錯誤。抱歉。我會盡快更新它。 – Binoman

+0

客戶端代碼在哪裏? – jfriend00

回答

1

我發現這是我的防病毒網絡保護,阻止了連接。我爲我的本地主機地址做了一個例外,現在它工作得很好。

+0

完全一樣的東西。 Infurating!有關信息,我正在使用卡巴斯基。 – Alec

相關問題