我有一个在节点服务器上运行的4个设备的遥控器。
每个设备都有自己的页面(/ 1,/ 2,/ 3,/ 4),但它们都是从相同的html / js生成的。
唯一的区别是每个设备的ip,从服务器上的json加载,具体取决于url路径。
这一切都有效,但问题是:我有3个明显错误的IP输入用于测试目的,一个正确的IP。现在,如果我打开正确的那个,返回到父页面并打开具有错误IP的设备的页面,它仍然显示为在线并且可以被控制。
我理解这一点:套接字在页面中保持打开状态,实际上并非在每个站点上都是新建的。
如何确保每个子页面都生成一个新套接字?
现在,我只是
socket = new io.connect();
在browser.js中,
ioServer.on('connection', function (socket) {
//etc.
}
我是否正确地假设我需要某种"销毁套接字如果页面被更改" -function?
感谢您的帮助
答案 0 :(得分:0)
从外观上看,您只想在设备的客户端第一次连接并发出“启动”时实例化并启动设备。如果不是这种情况,我可能会在服务器启动时实例化并启动每个设备。
在第一种情况下,我会将您的设备存储在键值对象中,并在需要时重复使用它们。
var devices = {};
ioServer.on('connection', function (socket) {
var client_ip_address = socket.request.connection.remoteAddress;
console.log("New Connection from: " + client_ip_address);
var device;
socket.on('startup', function (data) {
var deviceId = data.device;
console.log("[INFO] startup: device " + deviceId);
//If this device is already in devices, resuse it
if (deviceId in devices) {
//Get the device from your devices object
device = devices[deviceId];
//Otherwise, create a new device and store it in devices
} else {
device = new HyperDeck(deviceId);
//Store new device in devices object
devices[deviceId] = device;
device.boot();
}
console.log(device.id);
console.log(device.ip);
});
...