SourceChordスマートフォン用の表示で見るSourceChordC#とXAML好きなプログラマの備忘録。最近はWPF系の話題が中心です。Node.jsMainProcess(BrowserProcess)とRendererProcess間の通信方法についてメモ。プロセス間の通信方法は何通りかありますが、順番に見ていきます。remoteモジュール使ってMainProcess側としてモジュールを読み込む方法remote経由でのrequire。これもある意味プロセスをまたいだ処理、ということで。MainProcess用のモジュールをRendererProcessから使いたい時や、重たい処理をするコードをreqireするときに使ったりします。今までも普通に書いてたけど、こういうヤツです。remote.require('browser-window');remote.require(xxxx)とすると、そのモジュールはMainProcess側のプロセスで動作します。することで、「app」や「browser-window」のようなMainProcess用のモジュールも、RendererProcessから利用することができるようになります。RendererProcess⇒MainProcessへの通信(ipcモジュール)今度はより汎用的なプロセス間の通信をしてみます。RendererProcessで何かの操作をしたら、そのタイミングでMainProcessに通知してみます。RendererProcessとMainProcessの間で汎用的なプロセス間通信を行うには、「ipc」モジュールを利用します。ipcモジュールでRendererProcess⇒MainProcessの通信をするときには、同期/非同期の二通りの通信方法が用意されてます。非同期な通信では、送信側からでipc.sendメソッドでメッセージを送り、受信側ではipc.onでハンドラを登録してメッセージ受信時の動作を定義します。ここでは、htmlで適当にボタンを用意しておき、onclickでhello()メソッドを呼ぶようにしておきます。hello()メソッドでは、Renderer⇒Mainへとasync-messageというメッセージを送り、Mainプロセスでは処理が完了したら、RendererProcessへasync-replyというメッセージで処理の完了を通知しています。同期的な通信を行う場合、MainProcess側での処理が完了するまでRendererProcessがブロックされてしまうため、基本的に非推奨となってます。使うことはないかと思いますが、一応使い方をメモだけしときます。同期通信では、処理の完了の返し方が違うので注意。MainPrcessでevent.returnValueプロパティに値をセットするだけで、同期通信の完了通知となります。'pong';});MainProcess⇒RendererProcessへの通信(webContents.sendメソッド)今度はMainProcessからRendererProcessへとメッセージを送ってみます。MainProcessでメニューとか作った時に、メニューのclickイベントでRendererProcess側に何かメッセージを送って、処理をする、といった場面で使えるかと思います。RendererProcessへメッセージを送るには、目的のBrowserWindowのインスタンスのwebContentsプロパティを取得し、webContents.sendメソッドでメッセージを送ります。受信側は、先ほどの例と同じようにipc.onで受け付けます。この通信方法では、同期的な通信はサポートされておらず、非同期な通信のみサポートされています。同期的な処理はデッドロックの原因になったり、なにかと問題を起こすので、同期通信は非サポートとのこと。送信側sendメソッドで送るだけ。RendererProcessに何か引数をつけて通知することもできます。'メッセージの引数');受信側onで登録するコールバック関数には、sendで指定した引数が渡ってきます。alert(msg);});サンプルこんな内容のサンプルです。全体のコードはこんな感じ。メインウィンドウの参照をグローバルに持っておく。ウィンドウを閉じても一般的にアプリ終了はしないので除外。ウィンドウが閉じられたら、ウィンドウへの参照を破棄する。アプリ開発Windows開発者はてなブログをはじめよう!minami_SCさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。