Я учусь реализовывать сокеты в узле js. Для этого я использовал socket.io. Обычно для настройки сокета в проекте нам нужен сервер или объект http.
Так что я работаю с Express и для создания http-сервера он определен в bin/wwww
, как показано ниже
var server = http.createServer(app);
// Implement socket
var vm = require('../vmcontroller.js')
var docker = require('../docker.js')
var io = require('socket.io')(server);
io.on('connection', function (socket) {
vm.getSocket(io, socket)
docker.getSocket(io, socket)
socket.on('disconnect', function () {
});
})
Чтобы получить доступ к объекту сокета в каждом файле, я создал функцию в каждомфайл с именем getSocket(io, socket)
и передачей значений. в этом конкретном файле я объявил функцию и глобальную переменную сокета, как показано ниже
//vmcontroller.js
var globalSocket;
---------
---------
//some code
function emitVmEvent() {
globalSocket.emit("vm_created",{error:false,message:'vm creation on cloud succeded'})
}
---------
---------
function getSocket(io,socket) {
globalSocket = socket;
}
Итак, если мой подход подходит для нескольких пользователей, отправляющих запросы одновременно? Я хочу, чтобы, если запрос 1 имеет объект сокета A, то он должен быть связан только с этим запросом, к нему не должен быть доступ никаким другим запросом. Так как объект сокета является глобальным в файле, поэтому он не должен быть общим для запросов.