javascript - 尝试使用带有 Node.js 的 Websockets (ws) 发送消息

标签 javascript node.js websocket

当两个时间戳相等时,我试图向我的客户发送一条消息,这是套接字部分的代码:

var WebSocketServer = require('ws').Server;
wss = new WebSocketServer({
port: WS_PORT
});
var futureTime = new Date(Date.UTC(2014, 3, 10, 4, 2, 0));
var futureTimeMins = futureTime.getMinutes();

wss.on('connection', function (ws) {
 ws.on('message', function (message) {
    // console.log('received: %s', message);
});
 setInterval(checkTime, 1000);
});

function checkTime() {
// console.log("checking time!");
 var date = new Date();
 currentMinutes = date.getMinutes();
 if (currentMinutes == futureTimeMins) {
    var message = {
        "background-color": "red"
    };
    ws.send(JSON.stringify(message));
    console.log("Message was sent");
 } else {
    console.log("Message wasn't sent");
    console.log(currentMinutes);
 }
}

所以我想比较两个时间戳,这就是为什么我将我的函数与 setInterval 一起使用,以便它可以检查时间何时更改。时间匹配后,我收到以下错误:

ws.send(JSON.stringify(message));
    ^
ReferenceError: ws is not defined

我不明白的是,如果我在函数 (ws) 范围内加载我的 checktime 函数,为什么它不识别。我是 websockets 的新手,所以非常欢迎任何建议

最佳答案

变化

setInterval(function(){ 
    checkTime(ws) },
1000);

function checkTime(ws) {
   ...
}

您使用闭包(参见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures)来声明变量ws,但您的函数checkTime 对ws 一无所知,它是预定义的函数,包装在setInterval 中,具有自己的可变范围。如果您将 checkTime 声明更改为匿名声明,它将起作用。

关于javascript - 尝试使用带有 Node.js 的 Websockets (ws) 发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22952732/

相关文章:

javascript - 如何缓存静态 Canvas 区域以获得性能

javascript - javascript是否在 bool 表达式中使用优化?

javascript - javascript 中 setInterval 循环的定期暂停

node.js - 序列化迁移 : Adding a foreign key constraint to a column on same table

tomcat - Apache Tomcat 7 Websocket 端口

node.js - 如何解决socket-io无限发送连接请求?

javascript - promise – 找不到变量过程

javascript - 如何在 JS 中从 ArrayBuffer 写入文件

node.js - npm 错误!尝试安装 package.json 时,git dep 准备失败

ruby-on-rails - ActionCable Rails 5(乘客)-失败 : Error during WebSocket handshake: Unexpected response code: 404