Bluetooth Low Energy (BLE) 経由で通信するデバイスにメッセージを送受信するための RESTful インターフェイスを提供するゲートウェイを作成しようとしています。基本的に、GATT を HTTP に、またはその逆に変換します。
基本的なアーキテクチャは次のようになります。
BLE ドングルが Linux コンピュータ (ラズベリーパイ) に接続され、C プログラムが BLE ドングルへのシリアル接続を開き、メッセージを送信/受信/処理します。TCP/IP ソケットを使用して IPC 経由で C++ アプリケーションから要求を受信し、このソケットを使用して BLE デバイス (fe センサー) から C++ アプリケーション (接続された各 BLE ドングルのマルチスレッド サーバーとして機能) に応答を転送します。
C++ アプリケーションは、この情報 (検出されたデバイス、接続されたデバイスとそのデータ) を保存し、検出、接続などの基本的な Bluetooth Low Energy 機能を制御するインターフェイスも実装します。
クライアントは、FastCGI を使用する Nginx Web サーバーに HTTP リクエスト (GET/POST) を送信できます。この FastCGI アプリケーションで要求を解析し、C++ アプリケーションと通信してコマンドを実行したいと考えています。
fe クライアントは、GET リクエストを送信する URI xyz/discover を開きます。FastCGI アプリケーションはこの要求を解析し、C++ アプリケーションの Discover 関数を呼び出して Bluetooth Low Energy の検出を開始します。
私の質問は、C++ アプリケーションと FastCGI C++ アプリケーションの間で最適な通信を行う方法です。
私のアイデア:
- C++ アプリは、exec fcgi-spawn (引数として私の fcgi アプリへのパス) を実行する新しい子をフォークします。次に、親と子の間の全二重通信用に 2 つのパイプを作成します。
- 両方のプロセス間で名前付きパイプを使用する
- C++ アプリケーションに FastCGI 機能を統合するだけでよいのでしょうか? C++ アプリは複数のスレッドを実行します。1 つは、新しいドングルが接続された場合に新しい TCP 接続を受け入れるためのものです。新しいドングルごとにスレッドを開始します。FastCGI リクエストの解析を担当する別のスレッドを作成することはできますか?
私は FastCGI と nginx を実際に扱ったことがないので、ただ学んでいます。だから、私はいくつかの入力に感謝します。ありがとう!