2017-01-23 6 views
-4

Linux上で動作するC++コードでwebsocketサーバーを実装する必要があります。 時々、クライアントにデータを非同期にプッシュする必要もあります。C++ Websocketサーバーが開始したデータ

これまでのところ、私は獣エコーサーバー、libwebsocketテストサーバーと libonion試してみました(それは一度クラッシュしていましたが、「GNUTLSが今を中止!でコンパイルされていない場合、カントはSHA1を計算する」エラー ブラウザから接続しようとしました私はダミーのテストクラスでより多くの情報を提供しようとしています。

test.cpp 
class test 
{ 
public: 
void processDataFromClient(const string & data);//this needs to get filled by websocket read method? how? 
void pushDataToClient(const string & data); 

}; 
test::pushDataToClient(const string & data) 
{ 
(socketId, text) // how do I call this from my test.cpp ? 
} 

test::void processDataFromClient(const string & data) 
{ 
//do some computation based on the text received 
//turn on the light 
//once Light is on for a minute call 
pushDataToClient(lighton) ; 
} 

//websocket_server.cpp 
main 
{ 
//open a webSocket 
//listen for messages from client i.e pass data received from onion_websocket_read to test class by calling processDataFromClient(); 
//send asynchronous messages to client received from test class. i.e. pushDataToClient should invoke onion_websocket_write //do we need a thread for this ? how to achieve this? 

} 

以下。しかし、私は私が上に構築することができます何を思い付くことができていない。

私はシンプルを探しています私が始めることを可能にするインターフェースwebsocketは、クライアントと非同期でデータを送受信します。

答えて

0

Angular JSクライアントをサポートするために、Linux上で動作するC++コードにサーバーを実装する必要があります。 利用可能なオプションは何ですか? rawソケット、boost-asioサーバー、CGI ベースのサーバーサポート、RESTサーバー経由でサーバーを実装するにはC++を使用するか、より良い/より速い オプションがありますか?私はこれまでに、それぞれのオプションの欠点/利点のうち、 を認識していませんでした。私は前にCGIと REST APIをコーディングしていません。あなたのコメントを教えてください。

おそらく私はあなたの質問を誤解していますが、C++でソケットベースのApache(またはnodejs)を書き直すことについて話していますか? AngularJSはブラウザで動作するフレームワークです。 「Angular JSクライアントのサポート」と言えば、C++でHTML/HTTPベースのアプリケーションを扱うことを意味しますか?これには、他のフレームワークやJavaScriptベースの実装も含まれます。

これが要件であれば、私はこれを最初からやっていません。それは大規模な事業です。あなたが一緒に働くことができ、構築することができるプロジェクトがあります。

ここでの参照のカップルです:

https://softwareengineering.stackexchange.com/questions/53624/can-c-be-used-as-a-server-side-web-development-language How to use C++ for apache server

編集:以下のコメントに基づいて、これらのソリューションのおそらく1?

How can I use a C++ library from node.js?
Forwarding apache request to a c++ program

+0

私はLinux上で動作するC++コードにHTTPリクエストを送るAngularJSで開発されたGUI /クライアントを持っています。私はそれらの要求を解析し、クライアントに応答を送る必要があります。私はあなたが送ったリンクをすばやく見ましたが、それは特定の解決策を特定していないので、私にも非常に圧倒的です。私はあなたが最初から始める必要はないC++ベースのサーバーフレームワークを提案していると思います。もしそうなら、あなたはより多くの情報でステップを提案してもらえますか? – user1867459

+0

私はC + +のサーバーフレームワークを提案しました。あなたがAngularを使っているとすれば、JavaScriptを知っている必要があります。おそらくNodejsを最初に見て、C++の部分をプラグインすることができるかどうかを見てみましょう。もちろん、JavaであるApacheがあります。 – kmiklas

+0

私はこのC++フレームワークに出会った。 https://github.com/corvusoft/restbedこれを使うべきかどうかはわかりません。あなたのコメントを教えてください。 – user1867459

0

あなた最初の必要性深くHTTPWebSockets理解し、両者の密接な関係:彼らはあなたがノード/アパッチからC++プログラムを呼び出すことが可能モジュールです。両方を勉強するのに数週間かかります。あなたはおそらくまた理解する必要がありますHTML5 & JavaScript & AJAX

(あなたは、これらすべての科目についての詳細を学び、数ヶ月をかけて開始する必要がある場合がありますので、あなたはそれらに関連するいくつかの書籍やウェブサイトを見つけることができます。)

WebSocketのサポートを提供するCおよびC++ HTTPサーバーライブラリを使用する方が効果的です。例えばのように。 libonion(おそらくWtですが、WebSocketをサポートしているかどうかはわかりません)。 libonionにはexample for websocketがあります(もちろん最新のスナップショットが必要です)。

いくつかの時間を過ごした後(おそらく数ヶ月、数日は十分ではありません)をよく理解することが HTTP & WebSocketをあなたが両方 HTTP & WebSocketをを扱うC++サーバープログラムを実装する必要があることを認識する可能性があります。単にC++プログラムを「単純」にしてWebSocketを実行するだけで、HTTPを処理することなく、おそらく無意味であり、確かに役に立たないでしょう。しかし、C++の特殊なHTTP + WebSocketサーバープログラムでは、汎用Webサーバーからいくつかの要求が転送される可能性があります(proxy serversを参照)。

Comparison of WebSockets implementationsウィキペディアも参照してください。

+0

をご覧ください。libonionはウェブソケットをサポートしています。その目的のために私はそれを使用しました。そのライブラリの最新のスナップショットが必要です –

+0

希望の動作を得るために、websocketppライブラリのシンプルなWebサーバーコードをいくつか変更しました。 https://github.com/zaphoyd/websocketpp/ – user1867459

関連する問題