Electron-vue 链接网络与服务器

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();

4、执行效果

在这里插入图片描述

总结

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值