簡體   English   中英

嘗試使用Websockets(ws)和Node.js發送消息

[英]Trying to send a message using Websockets (ws) with Node.js

當兩個時間戳相等時,我正在嘗試向客戶發送消息,這是套接字部分的代碼:

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函數,為什么不能識別。 我是websocket的新手,所以任何建議都值得歡迎

變化

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

function checkTime(ws) {
   ...
}

您可以使用閉包 (請參閱https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures )來聲明變量ws,但是函數checkTime對ws一無所知,它是包裝在setInterval中的預定義函數具有自己的可變范圍。 如果將checkTime聲明更改為匿名聲明,則可以使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM