我正在尝试制作一个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.");
});
}
答案 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.");
});
}