我的机器中运行着一个带有URL“ ws:// localhost:1122”的websocket。将其与普通javascript一起使用并将其部署在码头服务器中时,我能够连接到websocket。
但是在使用节点js时,我无法连接到Web套接字。我在两种情况下都使用以下代码
var socket = new WebSocket(URL);
在使用节点js时,我添加了以下var WebSocket = require("ws")
。但是套接字的readyState永远不会在节点js中变为OPEN。
Node js中是否缺少任何内容,因为当使用码头作为服务器和普通的javascript时,我能够连接到网络套接字。
这是我的app.js
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello World\n');
}).listen(1131, "localhost");
var WebSocket = require("ws");
var wsUri = "ws://localhost:1122";
var socket;
printer();
function printer() {
socket = new WebSocket(wsUri);
console.log(socket.readyState);
}
答案 0 :(得分:1)
由于Node.js的异步特性,socket.readyState
不能立即反映连接状态。
相反,您应该使用事件发射器接口检查是否/何时建立连接:
socket = new WebSocket(wsUri);
socket.on('open', function() {
console.log('connection opened');
}).on('close', function() {
console.log('connection closed');
}).on('error', function(e) {
console.log('connection error', e);
});