2014-07-05 14 views
63

Sto cercando di capire come funziona Electron (precedentemente Atom Shell).Qual è il modello Client/Server quando si utilizza Electron (Atom Shell)?

vengo da una tradizionale applicazione web in stile MVC in cui un browser chiede un'azione controller attraverso un sistema di routing , il controller poi recupera i dati da un sistema di negozio (File, Data Base,. ..) e visualizza Visualizza, che viene rinviato al browser. Alcune azioni potrebbero invece rimandare JSON, poiché vengono chiamate tramite JavaScript/AJAX anziché il browser che effettivamente sta navigando verso di loro.

Voglio creare ciò, ma come un'applicazione desktop multipiattaforma. So che Atom Shell combina sia un browser Chromium che un runtime Node.js/v8, ma non sono sicuro di come comunicherebbero.

Credo di poter eseguire un server Web completo (in pratica, alcuni middleware Node.js HTTP come Express), ma questo crea un server raggiungibile dalla rete (che potrebbe anche far scattare i firewall) - uno dei motivi per cui voglio fare un'app desktop è proprio per evitare l'esecuzione di un vero server. Fondamentalmente come il pattern MVP/MVVM in un'app desktop "normale".

Qualcuno può darmi alcuni punti di partenza per quello che sto cercando di fare? In che modo il browser parla al runtime del nodo (il "Client" come lo chiamano?) Per dirgli "Ehi, prendi il mio record con ID 12345" e il client restituirà HTML reso, o il browser otterrebbe solo un blob di JSON indietro e renderlo attraverso un motore di template JavaScript?

+0

Solo una nota, e' Non è esattamente "Github" Atom Shell, il codice è appena ospitato su Github :) – apparatix

+16

@apparatix Atom è un progetto della società Github :) –

+1

Ottima domanda. Questo link dovrebbe essere pubblicato sulla pagina di avvio di Electron (qui ci atterro un anno dopo non ne ho più avuto bisogno ... sarebbe stato bello avere davanti!) – jleach

risposta

62

Electron non sembra utilizzare Node.js come server Web ma semplicemente come ambiente per eseguire codice JavaScript in background, questo codice può utilizzare i moduli nodo per accedere al sistema. Allo stesso tempo, Chromium fornisce un'interfaccia utente per l'app, visualizza le normali pagine Web che eseguono il normale JavaScript sandbox. Entrambi sono incorporati nell'eseguibile di Electron, il primo direttamente (Node.js può essere costruito come libreria statica), il secondo tramite libchromiumcontent. In un certo senso, Node.js è la parte controller dell'applicazione mentre Chromium è la vista.

In genere, il concetto utilizzato per le pagine Web qui è quello di single-page applications: una pagina Web rappresenta una finestra dell'applicazione e come tale rimane intorno finché questa finestra è visibile (spesso per l'intera durata dell'applicazione). Ogni volta che deve mostrare qualcosa di diverso, richiede i dati dal codice di background in esecuzione in Node.js, proprio come le applicazioni AJAX richiedono i dati dal server. La pagina stessa non viene ricaricata, in genere verranno utilizzati i modelli JavaScript per aggiornare i contenuti.

Qui non esiste una relazione server/client, tuttavia, la comunicazione può effettivamente andare in entrambe le direzioni. Entrambe le parti possono utilizzare il modulo ipc per inviare messaggi a vicenda (main process, renderer). Questi messaggi possono avere qualsiasi argomento ad essi collegato, questi non devono essere codificati esplicitamente (in genere questo viene implementato utilizzando internamente JSON per codificare i parametri, non ho verificato se questo è il caso di Electron). Internamente, il messaggio che passa è implementato tramite meccanismi specifici della piattaforma IPC, utilizzando libuv per l'esattezza.

+0

Collegamenti interrotti per ipc e modulo. .. ha un link a un repository con il codice che implementa questo? –

+2

@MarkWilbur: Ho aggiornato i collegamenti. –

3

abbiamo implementato completamente funzionale nodejs server di & angolare UI con sqlite3, ORM sequelize utilizzando

*.https://github.com/theallmightyjohnmanning/electron-express

alcuni dei progetti ci ha aiutato molto:

  • Framework: https://github.com/angular-fullstack/generator-angular-fullstack di Windows Packaging: electron-packager ": "GitHub: elettrone-userland/elettrone-packager"
  • Creazione di collegamenti e di aggiornamento automatico : "electron-scoiattolo-startup": "^ 1.0.0",
  • Creazione di uscita Installer: "electron-winstaller": "^ 2.3.4",
Problemi correlati