是否有可能制作一个基于托盘的Electron应用程序来处理节点ws服务器?

时间:2018-04-18 18:21:07

标签: node.js websocket electron

我正在尝试制作一个websocket服务器,该服务器将从一个漂亮的托盘图标运行,并在上下文菜单中提供一些停止/启动等选项。我正在使用npm module ws作为服务器。

如果我从Electron的主过程启动我的ws服务器它的工作非常好但是如果我从电子托盘menuitem的点击回调开始它,服务器的启动回调永远不会触发,据我所知。

tray = new Tray(path.join(__dirname, '/icon.png'));
tray.setToolTip("Title");
tray.setContextMenu(Menu.buildFromTemplate([
    { label: "Start Server", click: () => { startServer(); } }
]));

function startServer(){
    new ws.Server({ port: 4837 }, () => {
        console.log("Server started.");
    });
}

1 个答案:

答案 0 :(得分:0)

好。我通过在托盘单击处理程序中设置一个标志并在js文件末尾的间隔中捕获该标志来启动服务器,从而弄明白这一点。

我最好的猜测,处理托盘的进程/线程有些奇怪。

通过更多的调查,似乎我可以通过调用绑定函数来启动服务器。不知道为什么。

tray = new Tray(path.join(__dirname, '/icon.png'));
tray.setToolTip("Title");
tray.setContextMenu(Menu.buildFromTemplate([
    { label: "Start Server", click: startServer.bind(this); }
]));

function startServer(){
    new ws.Server({ port: 4837 }, () => {
        console.log("Server started.");
    });
}