這幾天學習了一下Elctron,對於這個應用有了一點簡單的認識,將這個過程記錄一下。
首先,electron會加載main.js,在這里將整個程序啟動,相當於其他程序的main函數了。
我是基於electron-api-demos來簡單改寫的,所以將服務器端放到了main-process文件夾,在這個文件夾中的js文件,會在啟動的時候被require進來,駐在后台,可以通過設置斷點調試了。PS:使用的是VS Code
然后就是使用IPC通信來完成這個服務器端的工作,ipcMain在服務器端的接收通信。先創建一個server

1 function createServer(port) { 2 const HOST = '127.0.0.1'; 3 4 if (server) { 5 server.close(); 6 } 7 8 server = net.createServer(); 9 10 server.listen(port, HOST, function() { 11 console.log('Server listen on port:' + server.address().address); 12 13 sendServerData('start-server', 'server is listening...'); 14 }); 15 16 17 server.on('connection', socket => { 18 sendServerData('connect-server', 'Get conneciton from:' + socket.remoteAddress); 19 20 socket.on('data', data => { 21 sendServerData('data-server', 'Get data from socket:' + socket.remoteAddress + '. The data:' + data); 22 socket.write('you said:' + data); 23 }); 24 25 socket.on('close', () => { 26 sendServerData('close-server', 'Socket:' + socket.remoteAddress + " closed"); 27 }) 28 }); 29 30 }
通過這個方法就可以建立一個TCP服務器,當收到前端發送的event,就可以創建了,這里前端發送的消息是 start-server

1 const net = require('net'); 2 const {ipcMain} = require('electron') 3 4 let server; 5 let client; 6 let serverEvent, clientEvent; 7 8 ipcMain.on('start-server', (event, arg) => { 9 serverEvent = event; 10 // event.sender.send() 11 createServer(arg); 12 })
補一個函數,就將消息返回給前端

1 function sendServerData(channel, msg) { 2 try { 3 console.log(`server send event ${channel}, ${msg}`); 4 5 if (serverEvent) { 6 serverEvent.sender.send(channel, msg); 7 } 8 } catch (error) { 9 console.error('gt error:' + error); 10 11 } 12 } 13
這樣一個簡單的TCP服務器端就搞定了
接下來就是在前端創建一個html,加一個按鈕(tcp-server)、一個文本框(port-input)用於輸入端口和文本框(log-text)用於顯示接受的消息,當點擊按鈕就發送event到后端

1 const ipc = require('electron').ipcRenderer 2 3 var severBtn = document.getElementById('tcp-server'); 4 var port = document.getElementById('port-input'); 5 var logoutput = document.getElementById('log-text'); 6 7 severBtn.addEventListener("click", () => { 8 9 ipc.send('start-server', port.value); 10 }) 11 12 ipc.on('start-server', (evnet, args) => { 13 addText(args); 14 }) 15 16 ipc.on('connect-server', (evnet, args) => { 17 addText(args); 18 }) 19 20 ipc.on('data-server', (evnet, args) => { 21 addText(args); 22 }) 23 24 ipc.on('close-server', (evnet, args) => { 25 addText(args); 26 }) 27 28 function addText(msg) { 29 logoutput.textContent += msg + '\n'; 30 }
tcp-server