ホームページ >バックエンド開発 >PHPチュートリアル >php と他の言語間の相互作用を解決する方法 (80)
php と他の言語間の対話 (80)
今、Web サーバー S1
とアプリケーション サーバー S2 (検索機能など)
があるとします。S1y は php で書かれており、 S2 のアプリケーション C (または Java、C++) で記述されています。
2 つのサーバー間の対話を実現する方法
プロセスは次のように考えます。
1. ユーザー アクセス S1
2. サーバーは S2 に操作を引き渡します
3. S2 は操作結果を S1 に返します
4. S1 はユーザーに情報を返します
--- ---解決策- ------------------
石鹸
------解決策---------
jsonはできないでしょうか?
------ソリューション---------
あらゆるネットワーク上のサーバー間のデータ通信ソリューション
soap/xmlrpc/REST/json(p)/ を使用してください。これらはより便利で成熟しています
両方のサーバーを十分に制御できる場合は、
もちろん自分で行うこともできます 直接通信ソケット経由 (80 以外のポートも使用可能)
両方のサーバーが同じデータベースやネットワーク ファイル システムなどの特定のパブリック メディアを操作できる場合、
もちろん、このメディア データを通過することもできます。 。 。
。 。 。 。
------解決策---------
JSON (JavaScript Object Notation) は軽量のレベルデータです交換形式。これは、JavaScript のサブセット (標準 ECMA-262 第 3 版 - 1999 年 12 月) に基づいています。 JSON は完全に言語に依存しないテキスト形式を使用しますが、C 言語ファミリー (C、C++、C#、Java、JavaScript、Perl、Python など) に似た規則も使用します。これらの特性により、JSON は理想的なデータ交換言語になります。人間にとっては読み書きが簡単で、機械にとっては解析と生成が簡単です。
------解決策------------------
これを試すことができます
http:// developer.51cto.com/art/201002/182757.htm
もちろん、多少の違いはあります。目標は同じです
------解決策---------
インターフェースを書く
------解決策------------------
最も簡単な方法は、GET または POST で値を渡すことができる PHP の file_get_contents('http://ip:port') を使用することです。重要なのは、S2 がどのように作成するかです。 http プロトコルのリスナー プログラム。
libevent を使用すると、http サービスを非常に簡単かつ迅速に確立できます。簡単なコードは次のとおりです。
#include <sys> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <event.h> #include <http.h> void generic_request_handler(struct evhttp_request *req, void *arg) { struct evbuffer *returnbuffer = evbuffer_new(); evbuffer_add_printf(returnbuffer, "リクエストありがとうございます!"); evhttp_send_reply(req, HTTP_OK, "クライアント", returnbuffer); evbuffer_free(リターンバッファ); 戻る; } int main(int argc, char **argv) { 短い http_port = 8084; char *http_addr = "0.0.0.0"; struct evhttp *http_server = NULL; イベント初期化(); http_server = evhttp_start(http_addr, http_port); evhttp_set_gencb(http_server, generic_request_handler, NULL); fprintf(stderr, "サーバーはポート %dn で起動しました", http_port); イベントディスパッチ(); リターン(0); <div class="clear"></div></http.h></event.h></unistd.h></stdlib.h></stdio.h></sys>