4

Linux (RHEL 4/5) で SunRPC を使用するいくつかのサービスを高速化したいと考えています。

私たちの RPC 呼び出しは戻り値を必要としませんが、RPC の性質上、とにかく常に ack が送信されます。これにより、最近問題になっている遅延が発生します。信頼できるトランスポート (TCP) で実行する場合、RPC 応答によって発生する遅延を回避したいと考えています。

ここのドキュメントは、Solaris がそれを可能にする「oneway」キーワードを持っていることを示していますが、Linux/glibc はこれをサポートしていないようです。

Linux で SunRPC を使用して「ストリーミング」または一方向メッセージングを有効にする方法はありますか?

4

2 に答える 2

2

clnt_call()非同期 (または「バッチ」) RPC 呼び出しを取得するには、標準の呼び出しに対して 2 つの変更を加える必要があります。応答データ構造の XDR 関数へのポインターでNULLある引数は、ゼロ、つまり、

static struct timeval ZERO_TIMEOUT = { 0, 0 };
static char clnt_res;
memset((char*)&clnt_res, 0, sizeof(clnt_res);
if (clnt_call(clnt, messageType, (xdrproc_t)xdr_messageType_t, (caddr_t)argp,
            (xdrproc_t)NULL, (caddr_t)&clnt_res, ZERO_TIMEOUT) != RPC_SUCCESS) {
    ...
}
于 2010-11-19T20:34:38.640 に答える
1

RPC ライブラリが「一方向」通信をサポートしていない場合は、いつでもスレッド プール パターンを使用して、プログラムで「ファイア アンド フォーゲット」の種類の呼び出しをエミュレートできます。リモート呼び出しを直接送信する (したがって応答を受信するまでブロックする) 代わりに、別のスレッドでリモート呼び出しを行うコマンドをキューに入れ、メイン プログラムがその実行を続行できるようにします。

于 2010-11-19T18:00:25.690 に答える