Ниже приведен фрагмент кода:Доступ глобальных переменных в setImmediate в node.js
var buffer = new Buffer(0, 'hex'); //Global buffer
socket.on('data', function(data) {
// Concatenate the received data to buffer
buffer = Buffer.concat([buffer, new Buffer(data, 'hex')]);
setImmediate(function() { // Executed asynchronously
/*Process messages received in buffer*/
var messageLength = getMessageLength(buffer);
while (buffer.length >= messageLength) {
/*Process message and send response*/
}
//Remove message from buffer after processing is done
buffer.splice(messageLength);
}) // End of setImmediate
}) //End of socket.on
Я использую глобальную переменную «буфера», внутри блока setImmediate (асинхронно). Есть ли гарантия того, что глобальная буферная переменная не изменится (из-за добавления данных или удаления данных) во время выполнения кода в блоке setImmediate? Если нет, то как обращаться с безопасным доступом к буферам?
В чем проблема? Вы хотите, чтобы буфер был безопасным (буфер не используется внешней программой) при вызове setImmediate? Если setImmediate func body синхронизирован, вам не нужно беспокоиться об этом, javascript - это единственный поток. Если setImmediate func body является асинхронным, используйте переменную закрытия вместо глобальной. –