0

リモート プロシージャ コール サーバーとして機能するクラスを C++ で記述したいと考えています。

解析する大きな (ギガバイトを超える) ファイルがあり、パラメーターを読み取ってオブジェクトをインスタンス化し、それを std::map に格納します。RPC サーバーがクライアントからの呼び出しをリッスンし、クライアントから渡されたパラメーターを取得し、マップで適切な値を検索し、計算を行い、計算された値をクライアントに返すようにしたいと考えています。同時リクエストを処理するため、複数のスレッドをリッスンしたいと考えています。ところで、マップが作成された後、マップは変更されません。リクエストはそれから読み取るだけです。

Python でクライアントを書きたいと思います。サーバーは POST 要求をリッスンする HTTP サーバーであり、クライアントは urllib を使用してそれらを送信できますか?

私は C++ が初めてなので、サーバーの書き方がわかりません。誰かが私にいくつかの例を教えてもらえますか?

4

2 に答える 2

0

サーバーを C++ で作成する必要があり、その方法がわからない場合は、間違いなくフレームワークを使用する必要があります。

そこには多くの選択肢があり、StackOverflow はさまざまな選択肢について意見を求めるのに適した場所ではありません。ただし、1 つの例を挙げると、JsonRpc-Cpp約 10 行のコードと、公開する各 RPC のボイラープレート行で JSON-RPC (生の TCP または HTTP 経由) サーバーを実装できます。サーバーをゼロから作成するよりもはるかに簡単です。

サーバーの例を次に示します。

#include <cstdlib>
#include <jsonrpc.h>

class Service {
public:
    bool echo(const Json::Value &root, Json::Value &response) {
        response["jsonrpc"] = "2.0";
        response["id"] = root["id"];
        Json::Value result;
        result["params"] = root["params"];
        response["result"] = result;
        return response;
    }
}

int main(int argc, char *argv[]) {
    int port = std::atoi(argv[1]); // add some error handling here...

    Json::Rpc::TcpServer server("127.0.0.1", port);
    Service service;
    server.AddMethod(new Json::Rpc::RpcMethod<Service>(service,
                     &Service::echo, "echo");
    server.Bind(); // add error handling again
    server.Listen();
    while(true) server.WaitMessage(1000);
}

ただし、Python でサーバーを作成するか、WSGI Web サーバーを使用して Python でサービスを作成し、Python から C++ コードを呼び出すと、おそらくさらに簡単になります ( を介してctypes、または Cython などでラッパーを構築することによって) SIP)。

を使用した Python の同じサーバーを次に示しますbjsonrpc

import bjsonrpc

class Service(bjsonrpc.handlers.BaseHandler):
    def echo(self, *args):
        return {'params': args}

server = bjsonrpc.createserver(handler_factory = Service)
server.serve()
于 2013-07-17T22:53:21.853 に答える
0

おそらく、要因が選択に影響を与える可能性があります。

1 つの解決策は、fastcgi を使用することです。

クライアントは、fastCGI が有効になっている HTTP サーバーに HTTP 要求を送信します。HTP サーバーは、fastcgi メカニズムを介して RPC サーバーにリクエストをディスパッチします。RPC サーバーは、応答を処理して生成し、http サーバーに送り返します。http サーバーがクライアントに応答を返します。

于 2013-07-17T22:01:07.880 に答える