Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 是否可以制作一个基于托盘的电子应用程序来处理节点ws服务器?_Node.js_Websocket_Electron - Fatal编程技术网

Node.js 是否可以制作一个基于托盘的电子应用程序来处理节点ws服务器?

Node.js 是否可以制作一个基于托盘的电子应用程序来处理节点ws服务器?,node.js,websocket,electron,Node.js,Websocket,Electron,我正在尝试制作一个websocket服务器,它将从一个漂亮的托盘图标运行,并在上下文菜单中提供一些停止/启动等选项。我正在使用服务器的 如果我从Electron的主进程启动ws-server,它绝对可以正常工作,但如果我从Electron的托盘菜单项的单击回调启动它,服务器的启动回调永远不会启动,据我所知 tray = new Tray(path.join(__dirname, '/icon.png')); tray.setToolTip("Title"); tray.setContextMen

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

如果我从Electron的主进程启动ws-server,它绝对可以正常工作,但如果我从Electron的托盘菜单项的单击回调启动它,服务器的启动回调永远不会启动,据我所知

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.");
    });
}

好的。我通过在托盘点击处理程序中设置一个标志,并在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.");
    });
}

没错,上面写着console.log(“server started”)的那个永远不会触发。或者至少,从来没有出现在终端灯上,你能在那里设置一个断点吗?不幸的是,我无法让vscode的调试正常工作,我建议你先解决这个问题。或者尝试使用electron's来提醒信息。