自己写的node微服务总结-包括监听 控制 长链接 做一些js做不了的操作(然后自己给自己写接口来做js做不到的事情真的香)

58 篇文章 0 订阅
22 篇文章 0 订阅

关于监听其他人访问,跟自己的前端保持长连接,获取本机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(‘开启成功’)
});
}

electron微服务除了自己访问自己外,要是需要访问别人,一定一定一定要注意,在第一次打开安装应用的时候,一定要把网络允许都点上对勾,不然你的微服务只能自己来访问自己,其他人是访问不进来的,一定要注意,要允许家庭网络和专用网络,因为默认是只有域网络。

自启动nodejs在electron创建窗口那个js里的app.on(“ready”,xxxxxx)里直接写你的node代码就行,路径需要注意一下在配置文件指定好路径。其他的想到在加。目前是这些大问题都解决了。

很多js无法执行的操作,用nodejs写微服务执行了来自己访问自己真的是太香了

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星陈~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值