不同站点实例上的新 websocket
New websocket on different instance of site
我在节点服务器上有 4 个设备 运行 的遥控器。
每个设备都有自己的页面(/1、/2、/3、/4),但它们都是从同一个html/js生成的。
唯一的区别是每个设备的 ip,根据 url 路径从服务器上的 json 加载。
一切正常,但问题是:出于测试目的,我输入了 3 个明显错误的 IP,还有一个是正确的。现在如果我打开正确的,回到父页面打开IP错误的设备页面,它仍然显示在线并且可以控制。
我是这样理解的:套接字在所有页面上都保持打开状态,实际上并不是在每个站点上都新建的。
如何确保每个子页面都生成一个新套接字?
现在,我只有
socket = new io.connect();
在browser.js、
ioServer.on('connection', function (socket) {
//etc.
}
在 app.js 中,它适用于一台设备。
我认为我需要某种 "destroy socket if page is changed" 功能是否正确?
感谢帮助
从表面上看,您只想在设备的客户端首次连接并发出 'startup' 时实例化并启动设备。如果不是这种情况,我可能会在服务器启动时实例化并启动每个设备。
对于第一种情况,我会将您的设备存储在一个键值对象中,并在需要时重新使用它们。
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);
});
...
我在节点服务器上有 4 个设备 运行 的遥控器。
每个设备都有自己的页面(/1、/2、/3、/4),但它们都是从同一个html/js生成的。
唯一的区别是每个设备的 ip,根据 url 路径从服务器上的 json 加载。
一切正常,但问题是:出于测试目的,我输入了 3 个明显错误的 IP,还有一个是正确的。现在如果我打开正确的,回到父页面打开IP错误的设备页面,它仍然显示在线并且可以控制。
我是这样理解的:套接字在所有页面上都保持打开状态,实际上并不是在每个站点上都新建的。
如何确保每个子页面都生成一个新套接字?
现在,我只有
socket = new io.connect();
在browser.js、
ioServer.on('connection', function (socket) {
//etc.
}
在 app.js 中,它适用于一台设备。
我认为我需要某种 "destroy socket if page is changed" 功能是否正确?
感谢帮助
从表面上看,您只想在设备的客户端首次连接并发出 'startup' 时实例化并启动设备。如果不是这种情况,我可能会在服务器启动时实例化并启动每个设备。
对于第一种情况,我会将您的设备存储在一个键值对象中,并在需要时重新使用它们。
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);
});
...