Как узел обрабатывает события? По одному или одновременно?
Мне нужно знать, будет ли одновременный доступ к общему массиву, как в следующем примере:
var ws = require("./ws.js"),
connections = [];
ws.createServer(function( socket ){
// add to connection array
socket.on('connect', function(){
connections.push(socket);
});
// remove from connection array
socket.on('close', function(){
var i = connections.indexOf(socket);
connections.splice(i,1);
});
}).listen(8000);
Когда клиент подключается, его сокет помещается в массив. Когда соединение закрыто, я хочу удалить его из массива соединений.
Но на других языках это может привести к проблемам с параллелизмом.
Fx. Если два соединения закрываются одновременно:
- Соединение A находит свое гнездо в индексе 4
- Соединение B находит свое гнездо в индексе 5
- Соединение A удаляется из индекса 4
- Соединение B удаляет себя из индекса 5 (но теперь это индекс 4)
Будет ли это когда-нибудь проблемой, или я могу предположить, что одновременно обрабатывается только один обратный вызов?
Задача любезно предоставлена: Майкл Андерсен
Решение
Нет, это не будет проблемой, потому что ваш код node.js выполняется в одном потоке. У вас не будет одной и той же функции, вызываемой одновременно.
Решение предоставлено: Caolan