2012-05-02 8 views
7

私はC++アプリケーションとJavascript Webアプリケーションの間でメッセージを渡す必要があるアプリケーションに取り組んでいます。C++とJavascriptの両方で実装された高レベルのプロセス間通信APIはありますか?

確かに私はどちらかの言語で自分自身でソケットコードを書くことができましたが、これは過去に必要なときに行っています。

私が本当に気に入っているのは、より高度なメッセージ投稿やメッセージキューイングのAPIです。誰もそのようなAPIを知っていますか?

私はICEを見ましたが、Javascriptバインディングを持っていないようです。 Boostメッセージキューも見てきましたが、C++側のものにしか対応していません。必要に応じて、私はこれらの技術のいずれかに対して自分のJavascriptバインディングをロールするかもしれません。

更新:申し訳ありませんが、私はこれをブラウザで実行したいと思います。

より完全なストーリーを提供するには、C++アプリケーションのロギングを設定および表示するための単純なブラウザベースのアプリケーションが必要です。

私はこれを行う他の方法があることを知っていますが、私は具体的には、ソケットAPIのメッセージキューのontopを構築するC++とブラウザベースの両方のJavascriptの高レベルライブラリに興味があります私はそれを自分で実装し、コードプロジェクトの記事を書くことを検討するかもしれません)。

また、私はウェブブラウザに関して移植性について悩まされていません。たとえば、Chromeでしか動作しない高水準のIPC Javascriptライブラリがある場合は、それに満足しています。

+0

ブラウザ、またはサーバー側のjsですか?どのような環境ですか? – joshp

+1

選択肢は基本的にJSON/HTTP、XML/HTTP、またはWebSocketを使用したものです。 –

答えて

2

私のニーズを満たす解決策を見つけました。それは完全に完璧ではありませんが、私はそれが十分にうまくいくと思います。

HTTPとajaxを使用して提案している人もいます。それは有用なアイデアとなりました。プロトタイプを作成した後は、私の基本的な必要性を解決すると思います。

具体的には、私のC++アプリケーションに埋め込まれたMongoose HTTPサーバーを使用しています。サーバーからデータを取得するためにjQuery ajax関数を使用しています。 jQueryクライアントは、新しいデータのためにサーバーを継続的にポーリングしますが、特に効率的ではありませんが、十分な仕事をしてくれると思います。

私の実装が完了したら、これを行う方法を説明する記事を書いて、この回答を更新します。

+0

誰かが興味がある場合は、この質問/回答で私が話していたプロジェクトに関する記事を書いています。 http://www.codeproject.com/Articles/448756/Introducing-Investigo-Using-a-Proxy-DLL-and-embedd –

4

あなたの質問に簡単に答えるには:いいえ、ECMAscriptで実装されたIPCはありません。

しかし、あなたは実際にあなたに既に質問しました。ブラウザで動作するJavascriptと通信しようとすると、(Web-)ソケット接続を使用してどちらの方向にも日付を渡す必要があります。もちろん、C++で単純なHTTPサーバーを作成することもできますが、それは過度のものであり、双方向ソケットの機能を持たないと思います。

C++で最初からWebソケット接続を実装する作業はまだまだありますが(仕様は長い間ずっと流れていましたが)、すでにいくつかのライブラリがあります。

node.jsと通信しようとしている場合、これは実際のソケット/パイプを使用することはほとんどありません。

+0

WebSocket(IPCの方法)は(少なくとも一部のブラウザでは)すぐに使用できますか? –

+0

XMLHttpRequestはどのようにIPCの定義を満たさないのですか?これは、RPCインターフェイスのための良い、明白な基礎です。 – Potatoswatter

+0

@jAndy C++でゼロからWebソケットを実装する方法はまだありますか?あなたが推薦するリソースがあり、これを達成するのに有益でしょうか? – Greg

4

JavaScriptで私はあなたがブラウザで実行していると仮定します。この場合、C++アプリケーションは、Webサーバーと、あなたが呼び出せるJSONベースのWebサービスを提供する必要があります。 JavaScript側では、AJAXを使用してそのWebサービスと通信します。

代わりに、C++側で実装するのが少し難しいかもしれないwebsocketsがあります。

+0

ブラウザで実行しています。 Webソケットは私がJavascriptで使っていると思っているものです。 –

+0

これは扱いにくくなるかもしれません。サポートしたいブラウザのバージョンによっては、フォールバックを実装する必要があります。それらのすべてが完全なWebソケットをサポートしているわけではないからです。基本的には、NodeJSの代わりにC++のためにhttp://socket.ioが必要です。 Webサービスはどこからでも、またJavaScript以外のクライアントでも動作します。 – Daff

0

サーバー側またはブラウザ以外の実装では、名前付きパイプはどうですか?

はいこれはヴィンテージの技術で、どのOSを使用するかによって使い分けられますが、サーバ側のjs環境ではファイルを読み書きする機能があり、「高レベル」のプロセス間の説明に適合しますコミュニケーション。

+0

Aha、ブラウザごとに更新されているので、私の答えは当てはまりません。 – joshp

1

DBusを試してみると、インターフェイスの定義、クエリ、使用が非常に簡単で、XPCOMやWebkitベースのブラウザ用のコンポーネントもいくつかあります(たとえば、http://sandbox.movial.com/wiki/index.php/Browser_DBus_Bridgehttp://code.google.com/p/v8-dbus/)。また、DBusはopensourceとクロスプラットフォームです。

+0

ありがとうございます。面白そうに見えますが、私はそれを調べます。 –

+0

私はこれが彼が望むことをするとは思わない。彼は、Webアプリケーションがサーバーと同じローカルマシン上のアプリケーションではなく、自分のサーバー上のアプリケーションと通信することを望んでいると思います。これは、ブラウザとC++アプリケーションが同じマシン上にある場合にのみ機能します。 (DBusはローカルコミュニケーションスキームです) –

関連する問題