1. ホーム
  2. javascript

Electron(Atom Shell)を使用する際のClient/Serverモデルとは何ですか?

2023-11-30 09:32:27

質問

私は、どのようにして エレクトロン (旧 Atom Shell) がどのように動作するのかを理解しようとしています。

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

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

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

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

どのように解決するのですか?

ElectronはNode.jsをウェブサーバーとしてではなく、単にバックグラウンドのJavaScriptコードを実行するための環境として使用しているようです。同時に Chromium はアプリのユーザーインターフェイスを提供し、サンドボックス化された通常の JavaScript を実行する通常の Web ページを表示します。前者は直接(Node.jsはスタティックライブラリとしてビルド可能)、後者は libchromiumcontent . ある意味、Node.jsはアプリケーションのコントローラ部分であり、Chromiumはビュー部分と言えます。

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

しかし、ここではサーバーとクライアントの関係はなく、通信は実際には双方向に行われます。双方とも ipc モジュールを使ってお互いにメッセージを送ることができます ( メインプロセス , レンダラ ). これらのメッセージには任意の引数を付けることができ、これらは明示的にエンコードする必要はありません(通常、これは内部でJSONを使ってパラメータをエンコードすることで実装されますが、Electronでそうなっているかどうかは検証していません)。内部的には、このメッセージパッシングはプラットフォーム固有の IPC 機構を利用して実装されます。 libuv を使っています。