socket.io を使用して、サーバーからクライアントに継続的にデータを送信しています。setTimeout
そのため、データを定期的に送信する機能を使用していましたが、スリープ時間は一定ではないためsetInterval
、使用していませんが、機能してsetTimeout
いません。サービス バスを使用して、定期的にクライアントに転送するワーカー ロールからデータを取得しています。これが私のコードです:
var sleepTime;
function requestQueue() {
sleepTime = 0;
console.log("REQUEST QUEUE STARTED");
console.log("SEND to WORKER ROLE");
// send the request to worker role
var broadcastMessage = {}
broadcastMessage.Channel = "World";
broadcastMessage.BufferSize = 10;
sendMessage(socketToWorkerRole, broadcastMessage)
receivePeriodicRecordsQueue(workerRoleToSocket);
}
////
function receivePeriodicRecordsQueue(queue) {
serviceBusService.receiveQueueMessage(queue, function (error, receivedMessage) {
if (!error) {
if (receivedMessage != null) {
var messageBody = receivedMessage.body;
if (messageBody != null) {
// Lots of processing and calculating sleep time
// SET TIMEOUT
if (sleepTime != 0) {
console.log("SLEEP TIME:" + sleepTime);
setTimeout(function () { requestQueue(); }, sleepTime);
}
// sending data to client through socket
io.sockets.emit('broadcast', recordsQueue);
}
}
}
}
else {
console.log(error);
}
})
}
私は基本的に C# プログラマーで、JS は初めてです。setTimeout
の実装が間違っている場合はお知らせください。基本的にrequestQueue
、可変スリープ時間を使用してメソッドを定期的に呼び出す必要があります
編集の答え:
私の場合、それはばかげた問題でした。ミリ秒ではなく秒単位のスリープ時間を使用していました。setTimeout
ミリ秒が必要です。setTimeout
async モジュールは非常に便利で、必要に応じて他の多くの機能の代わりとして使用できると考えたため、Scott を回答としてマークしました。