Frage

Wir haben einige Dienste nutzen SunRPC auf Linux (RHEL 4/5), dass wir möchten, dass bis beschleunigen.

Unser RPC-Aufruf keinen Rückgabewert benötigen, wenn auch durch die Art der RPC, ein ack sowieso immer gesendet wird. Dies führt Latenz das ist vor kurzem ein Problem werden - wenn sie über einen zuverlässigen Transport (TCP) läuft, würden wir die Latenz durch die RPC-Antwort eingeführt zu vermeiden hoffen

.

hier zeigt Solaris hat das „oneway“ Stichwort ermöglicht nur das, obwohl Linux / glibc nicht, dies zu unterstützen scheint.

Gibt es eine Möglichkeit können wir "Streaming" oder One-Way-Messaging mit SunRPC auf Linux?

aktivieren
War es hilfreich?

Lösung

Es gibt zwei Änderungen, die an den Standard clnt_call() Aufruf gemacht werden, um muss eine asynchrones (oder „dosierte“) RPC-Aufruf zu erhalten: das Argument, das für die Antwort-Datenstruktur der Zeiger auf die XDR-Funktion ist muss NULL und das Timeout-Argument Null sein muss, dh

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) {
    ...
}

Andere Tipps

Wenn Ihre RPC-Bibliothek nicht die „oneway“ Kommunikation nicht unterstützt, dann verwenden Sie immer die Thread-Pool-Muster den „fire and forget“ zu emulieren Art Aufruf in Ihrem Programm. Anstatt den Remote-Aufruf zu senden (und somit blockiert, bis Sie eine Antwort erhalten) Sie enqueue einen Befehl das macht den Remote-Aufruf in einem anderen Thread und ermöglicht es Ihnen, Hauptprogramm mit seiner Ausführung fortzusetzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top