74

Electron (以前の Atom Shell)がどのように機能するかについて頭を悩ませようとしています。

私は、従来の MVC スタイルの Web アプリケーションから来ています。ブラウザーは、ルーティング システムを介してコントローラー アクションを呼び出し、コントローラーはストア (ファイル システム、データベースなど) からデータをフェッチし、ビューをレンダリングします。これはブラウザに送り返されます。一部のアクションは、ブラウザが実際にナビゲートするのではなく、JavaScript/AJAX を介して呼び出されるため、代わりに JSON を送り返す場合があります。

私はそれを作成したいのですが、クロスプラットフォームのデスクトップ アプリケーションとして作成します。Atom Shell が Chromium-Browser と Node.js/v8 ランタイムの両方を組み合わせていることは知っていますが、それらがどのように通信するかはわかりません。

Web サーバー (基本的にはExpressのようないくつかの Node.js HTTP ミドルウェア) で完全に実行できると思いますが、それによってネットワークに到達可能なサーバーが作成されます (これは、ファイアウォールもトリップする可能性があります)。これが、デスクトップを作成する理由の 1 つです。アプリは、実際のサーバーの実行を避けるためのものです。基本的に、「通常の」デスクトップ アプリの MVP/MVVM パターンに似ています。

誰かが私がやろうとしていることの出発点をいくつか教えてもらえますか? ブラウザはどのようにノード ランタイム (「クライアント」と呼んでいますか?) と通信して、「ねえ、ID 12345 のレコードをフェッチしてください」と伝え、クライアントはレンダリングされた HTML を返しますか、それともブラウザは単に blob を取得しますか? JSON を戻して、JavaScript テンプレート エンジンを介してレンダリングしますか?

4

2 に答える 2

72

Electron は Node.js を Web サーバーとして使用していないようですが、バックグラウンド JavaScript コードを実行するための環境としてのみ使用しているようです。このコードはノード モジュールを使用してシステムにアクセスできます。Chromium はアプリのユーザー インターフェイスを提供すると同時に、通常のサンドボックス化された JavaScript を実行する通常の Web ページを表示します。どちらも Electron 実行可能ファイルによって埋め込まれています。前者は直接 (Node.js は静的ライブラリとしてビルドできます)、後者はlibchromiumcontentを介して埋め込まれています。ある意味で、Node.js はアプリケーションのコントローラー部分であり、Chromium はビューです。

通常、ここで Web ページに使用される概念は、単一ページ アプリケーションの概念です。Web ページは 1 つのアプリケーション ウィンドウを表し、このウィンドウが表示されている限り (多くの場合、アプリケーションの存続期間中) 存在します。何か違うものを表示する必要があるときはいつでも、AJAX アプリケーションがサーバーからデータを要求するのと同じように、Node.js で実行されているバックグラウンド コードからデータを要求します。ページ自体は再読み込みされません。通常、コンテンツの更新には JavaScript テンプレートが使用されます。

ここには実際にはサーバー/クライアントの関係はありませんが、通信は実際には双方向に行われます。両側でipcモジュールを使用してメッセージを相互に送信できます (メイン プロセスレンダラー)。これらのメッセージには任意の引数を付けることができ、明示的にエンコードする必要はありません (通常、これは内部で JSON を使用してパラメーターをエンコードすることで実装されます。Electron の場合はそうであるかどうかは確認していません)。内部的には、そのメッセージ パッシングは、正確にはlibuvを使用して、プラットフォーム固有のIPCメカニズムを介して実装されます。

于 2014-07-07T20:12:40.727 に答える
2

sqlite3 で完全に機能する nodejs サーバーと angular UI を実装し、ORM を使用して続編します

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

プロジェクトのいくつかは私たちを大いに助けてくれました:

于 2016-12-26T05:09:23.527 に答える