我一直在努力弄清楚我不明白的是:我有一个NodeJS websocket服务器在我的本地网络上的计算机上运行。从那台计算机的浏览器,我可以与websocket服务器通信。但是,从同一网络上的任何其他计算机上,我得到一个带有错误代码1006的强制closeEvent。
附呈服务器和客户端文件。客户端文件也从同一位置提供服务。如果能帮助我加深对这方面的理解,我将不胜感激。
谢谢!
ws_server.js
var fs = require('fs');
var path = require('path');
var httpServer = require('http').createServer(
function(request, response) {
if(request.url != ''){//request.url is the file being requested by the client
var filePath = '.' + request.url;
if (filePath == './'){filePath = './ws_client.html';} // Serve index.html if ./ was requested
var filename = path.basename(filePath);
var extname = path.extname(filePath);
var contentType = 'text/html';
fs.readFile(filePath, function(error, content) {
response.writeHead(200, { 'Content-Type': contentType });
response.end(content, 'utf-8');
});
}
}
).listen(8080);
var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({server:httpServer});
wss.on('connection', function(ws) {
ws.on('message', function(message) {
console.log('received: %s', message);
ws.send("You said: "+ message);
});
});
ws_client.html
<html>
<head>
<title>WS</title>
<script>
var connection = new WebSocket('ws://127.0.0.1:8080');
connection.onopen = function () {connection.send("The time is " + new Date().getTime());};
connection.onmessage = function (e) {document.getElementById("capture").innerHTML = e.data;};
connection.onclose = function(event) {console.log(event);};
</script>
</head>
<body>
<textarea id="capture"></textarea>
</body>
</html>
也许这只是代码中的一个错别字,但是当您从另一台计算机尝试时,您是否更改了ws://127.0.0.1:8080
中的地址?
127.0.0.1
总是指向本地主机,这不是您在这里想要的。
您应该使用本地地址(例如192.168.0.5
),或者更好的是:new WebSocket('/');
,它将连接到与页面相同的主机和端口。