关于监听其他人访问,跟自己的前端保持长连接,获取本机ip 唯一识别码等等等等的一些总结
首先在nodejs里
https://blog.csdn.net/she5684346/article/details/81455298
懒得复制,上面是获取本机的一些唯一标识符的
下面是自己的一些应用
///获取本机ip///
const os = require(‘os’);
function getIPAdress() {
var interfaces = os.networkInterfaces();
for (var devName in interfaces) {
var iface = interfaces[devName];
for (var i = 0; i < iface.length; i++) {
var alias = iface[i];
if (alias.family === ‘IPv4’ && alias.address !== ‘127.0.0.1’ && !alias.internal) {
return alias.address;
}
}
}
}
const myHost = getIPAdress();
获取本机ip
app.get(“/guid”, function (req, res) {
res.append(“Access-Control-Allow-Origin”, “*”);
res.append(“Content-Type”, “text/event-stream”);
console.log(“查询本机IP”)
res.end(UUID)
});
接口举例
长连接后台
app.get(“/sse”, function (req, res) {
res.append(“Access-Control-Allow-Origin”, “*”);
res.append(“Content-Type”, “text/event-stream”);
res.write(“event: connecttime\n”);
res.write(“retry: 10000\n”);
res.write(“data: " + (“来自服务端的成功通知”) + “\n\n”)
var timer = setInterval(function () {
res.write(“data: " + (command) +”\n\n”)
res.write(“data: " +(type)+ ‘.’ +(code)+”\n\n")
command = ‘’
type=‘’
code=‘’
}, 100);
});
长连接前台
sse() {
let that = this;
this.source = new EventSource(“http://localhost:8888/sse”);
this.source.addEventListener(
“open”,
function () {
console.log(“建立连接”);
},
false
);
this.source.addEventListener(
“connecttime”,
function (e) {
console.log(e.data);
console.log(“前端连接成功”);
},
false
);
this.source.addEventListener(
“message”,
function (e) {
else if (e.data.indexOf(“video”) !== -1) {
clearTimeout(that.plugInTime)
console.log(e.data)
let j = e.data.substring(e.data.indexOf(“.”) + 1, e.data.length);
console.log(“切视频”, j);
that.playList.forEach((item, index) => {
item.data.forEach((items, indexs) => {
if (items.code == j) {
that.chooseVideo(indexs, “video”, index);
}
});
});
} else if (e.data.indexOf(“img”) !== -1) {
clearTimeout(that.plugInTime)
let j = e.data.substring(e.data.indexOf(“.”) + 1, e.data.length);
console.log(“切图片”, j);
that.playList.forEach((item, index) => {
item.data.forEach((items, indexs) => {
if (items.code == j) {
that.chooseVideo(indexs, “image”, index);
}
});
});
}
},
false
);
},
这是封装后在electron的配置文件的 ready 里调用的代码
const path = require(“path”);
const express = require(“express”);
const app = express();
const os = require(‘os’);
export function startHttpServe() {
///获取本机ip///
function getIPAdress() {
var interfaces = os.networkInterfaces();
for (var devName in interfaces) {
var iface = interfaces[devName];
for (var i = 0; i < iface.length; i++) {
var alias = iface[i];
if (alias.family === ‘IPv4’ && alias.address !== ‘127.0.0.1’ && !alias.internal) {
return alias.address;
}
}
}
}
const myHost = getIPAdress();
let UUID = ‘’;
const wmic = require(‘node-wmic’);
var tmpfn = async () => {
var [item] = await wmic.BIOS();
console.log(“BIOS.SerialNumber=” + item.SerialNumber);
[item] = await wmic.CPU();
console.log(“CPU.ProcessorId=” + item.ProcessorId);
item = await wmic.DiskDrive();
console.log(“DiskDrive[0].SerialNumber=” + item[0].SerialNumber);
[item] = await wmic.CSProduct();
console.log(“CSProduct.UUID=” + item.UUID);
UUID = item.UUID;
}
tmpfn();
//process.resourcesPath是electron在配置文件里下配置完
extraResources: [
“./src/assets/**”
]
后出现的文件路径
正常情况下 下面这句话的jion里加上 __dirname 就是静态文件服务器(当前路径)了,以解决那些js访问不了的文件
//静态文件的路径
app.use(express.static(path.join(process.resourcesPath)));
//这是长连接的部分,时刻给前端页面推送监听到的命令 下面的接口里可以查询ip 识别码之类的,因为前端不好获取这些硬件信息,所以在nodejs里定义了后可以自己查自己
app.get(“/sse”, function (req, res) {
res.append(“Access-Control-Allow-Origin”, “*”);
res.append(“Content-Type”, “text/event-stream”);
res.write(“event: connecttime\n”);
res.write(“retry: 10000\n”);
res.write("data: " + (“来自服务端的成功通知”) + “\n\n”)
var timer = setInterval(function () {
res.write("data: " + (command) + “\n\n”)
res.write("data: " + (type) + ‘.’ + (code) + “\n\n”)
}, 500);
});
app.get(“/xxx”, function (req, res) {
//解决跨域
res.append(“Access-Control-Allow-Origin”, “*”);
res.append(“Content-Type”, “text/event-stream”);
//是发送
res.end(“播放!”)
});
app.listen(8888, () => {
console.log(‘开启成功’)
});
}