electron 解决socket端口被占用问题 启动socket服务,自动尝试可用接口

原理是本地写一个config.json,把初始端口放进去,每次启动electron的socket服务时如果发现端口被占用,就更新config.json里的端口号加1,并保存到config.json,然后退出并重启electron,直到找到可用的端口

{"port":1081}
const { app, BrowserWindow, protocol, dialog } = require("electron");
const path = require("path");
const { Menu } = require("electron");
const myMenu = require("./src/menu.js");
const WebSocket = require("ws");
const fs = require("fs");
//wss通讯服务
  let wss = {};
  openWs();
  function openWs() {
    fs.readFile("config.json", "utf-8", (err, configFileDataRes) => {
      if (err) {
        dialog.showMessageBox({
          type: "info",
          title: "读取配置文件失败",
          message: "请重新安装",
          detail: JSON.stringify(err),
        });
        throw err;
      }
      const configFileData = JSON.parse(configFileDataRes);
      try {
        wss = new WebSocket.Server({ port: configFileData.port });
      } catch (error) {
        console.log("创建webSocket失败:", error);
      }
      wss.on("connection", (ws) => {
        console.log(ws, configFileData.port + "成功了");
        /** 调用原生electron接口
         * {"type":"open_page","src":"pages/play/index.html","big":true}
         */
        ws.on("message", (message) => {
          message = JSON.parse(message);
          if (message.type == "open_page") {
            const win = new BrowserWindow();
            win.loadFile(message.src);
            win.webContents.openDevTools({ mode: "detach" });
            if (message.big) {
              win.maximize();
            }
          }
        });
        ws.send("something");
      });
      wss.on("error", (ws) => {
        storeData({ port: parseInt(configFileData.port) + 1 }, "config.json");
        app.exit();
        app.relaunch();
      });
    });
  }
  // /wss通讯服务
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值