Electrob-vue 链接网络与服务器
Electron-vue 探测是否连接到网络、与服务器的链接是否通畅
参考文章:
node网络检测 https://www.psvmc.cn/article/2021-05-12-node-js-network.htm
node实现定时任务 https://www.cnblogs.com/huoan/p/9709778.html
文章目录
一、Electron-vue 检测与网络连接
使用 Node.js 模块 is-online 对网络连接进行检测,在网络断开和连接网络时,弹窗提醒
1. 引入库
npm install is-online
2. 代码实现
在客户端启动时进行检测,因此需写在ready 事件中,代码如下(示例):
app.on('ready', async () => {
// 启动窗体
createWindow()
const isOnline = require('is-online');
isOnline({
timeout: 5000,
version: "v4" // v4 v6
}).then(online => {
if(online){
console.log("Internet available");
new Notification({
title: "网路已连接",
body: "请正常访问"
}).show();
}else{
console.log("Internet unailable");
new Notification({
title: "网路连接已断开",
body: "请重新连接"
}).show();
}
});
})
实现效果:
二、 连接服务器
1. 页面编写
模块引入
const net = window.require("net");
页面显示
<div>
<div>发送的消息: <input type="text" v-model="msg" /></div>
<div>接收的消息: <input type="text" v-model="msg2" /></div>
<div>
<el-button size = "small" @click="tcpClick">发送</el-button>
</div>
</div>
2. 服务器参数配置:
data(){
return{
client: null,
HOST: "XXX.XX.XX.XX", // 服务器地址
PORT: XX, // 端口号
msg : "",
msg2: "",
}
},
mounted(){
this.initTcp();
this.connect(this.PORT, this.HOST);
this.data();
// this.close() // 测试时,取消注释关闭与服务器的连接
},
3. 连接测试
Tcp 连接测试代码如下(示例):
// tcp 连接测试
methods:{
// 初始化TCP连接
initTcp(){
this.client = new net.Socket();
},
// 当一个socket 连接成功是触发该事件
connect(PORT,HOST){
this.client.connect(PORT,HOST,()=>{
console.log("连接成功: " + HOST + ":" + PORT);
// 建立连接后向服务器发送数据
this.sendMsgToTcp("Hello TCP Server")
});
},
// 接收到数据时触发该事件
data(){
this.client.on("data",(data) => {
console.log("DAT:" + data);
this.msg2 = data;
this.destroyTcp();
})
},
// socket 关闭触发该事件,监听连接关闭事件
close(){
this.client.on("close",()=>{
console.log("连接断开")
})
},
// 发送数据
sendMsgToTcp(msg){
this.client.write(msg);
},
destroyTcp(){
this.client.destroy();
},
tcpClick(){
console.log(this.msg);
}
}
4. 实现效果
三、调取exe格式的后台服务
通过子进程 child_process 模块,调取cmd命令打开后台服务
1. 代码
// 启动后台服务
const {exec} = require("child_process")
function runExec(){
let cmdStr = "start ./server/Server.exe" // 后台服务exe文件的路径
exec(cmdStr,{})
console.log("启动后台服务成功!")
}
2. 实现效果
四、 定时检测网络是否连接
1、引入库
// 引入 node 模块
npm i node-schedule
2、代码
写在主进程中,在程序准备好之后实时检测,因此写在 app.on(“ready”, ) 中
app.on("ready",()=>{
// var internetAvailable = require("internet-available");
var schedule = require("node-schedule");
var rule = new schedule.RecurrenceRule();
// 秒数为10时执行任务
rule.second = 10;
var j = schedule.scheduleJob(rule,function(){
console.log("每分钟打印一次", new Date())
netCheck();
});
})
// 网络检测函数
function netCheck(){
const internetAvailable = require("internet-available");
internetAvailable({
timeout: 4000,
retries: 10,
}).then(function(){
console.log("Internet available");
// new Notification({
// title: "网络状态检测",
// body: "网络连接正常"
// }).show();
}).catch(function(){
console.log("No internet");
new Notification({
title: "网络状态检测",
body: "网络已断开"
}).show();
});
}
3、拓展
// 任务执行规则
// 每秒执行任务
rule.second=[0,1,2,3,4,5 ......59];
// 每分钟0秒时执行任务
rule.second = 0;
// 每小时30分时执行任务
rule.minute = 30;
rule.second = 0;
// 每天零点执行任务
rule.hour = 0;
rule.minute = 0;
rule.second = 0;
// 每月1号执行任务
rule.date = 1;
rule.hour = 0;
rule.minute = 0;
rule.second = 0;
// 每周一、三、五、执行任务
rule.dayOfWeek = [1, 3, 5];
rule.hour = [0,24];
rule.minute = 0;
rule.second = 0;
// 取消任务
job.cancel();