ホームページ >バックエンド開発 >PHPチュートリアル >php と他の言語間の相互作用を解決する方法 (80)

php と他の言語間の相互作用を解決する方法 (80)

WBOY
WBOYオリジナル
2016-06-13 13:46:34986ブラウズ

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 サービスを非常に簡単かつ迅速に確立できます。簡単なコードは次のとおりです。

C/C++ コード

#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>
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。