verstehen brpc

Wir haben nur drei Benutzerklassen: Server, Channel und Controller, die jeweils der Serverseite, der Clientseite und dem Satz von Einstellparametern entsprechen.

Es besteht keine Notwendigkeit, über Fragen nachzudenken, wie „wie man den Client initialisiert“, „wozu XXXManager dient“, „welche Beziehung zwischen Kontext und Controller besteht“ und so weiter

Was zu tun ist, ist einfach:

Erstellen Sie einen Dienst durch #include <baidu/rpc/server.h> und verwenden Sie das Serverobjekt gemäß den Kommentaren oder Beispielen. Um auf
den Dienst zuzugreifen, #include <baidu/rpc/channel.h> und verwenden Sie das Channel-Objekt entsprechend zu den Kommentaren oder Beispielen
zur Steuerung eines RPC Für die Zugriffsparameter schaue einfach in baidu/rpc/controller.h nach. Bitte beachten Sie, dass diese Klasse Server und Channel gemeinsam ist, die in drei Abschnitte unterteilt ist, die als clientseitige, serverseitige und beideseitige Methoden gekennzeichnet sind. 1. Channel Channel kann von allen Threads geteilt werden, Sie müssen es nicht Erstellen Sie eine Methode für
jeden
Thread Um einen unabhängigen Kanal zu erstellen, müssen keine Sperren zum gegenseitigen Ausschluss verwendet werden. Die Erstellung und Init des Kanals sind jedoch nicht Thread-sicher. Bitte stellen Sie sicher, dass mehrere Threads darauf zugreifen, nachdem die Init erfolgreich war, und dann zerstört werden, wenn kein Thread-Zugriff erfolgt ist.

Verwalten Sie den Client, konfigurieren Sie die Anzahl der Threads, die Länge der Verbindung oder fügen Sie sie in brpc::ChannelOptions ein oder konfigurieren Sie sie global über gflags

Die Init-Funktion ist unterteilt in das Verbinden eines Server- oder Service-Clusters

1. Verbinden Sie sich mit einem Server

// options为NULL时取默认值int Init(EndPoint server_addr_and_port, const ChannelOptions* options);
int Init (const char* server_addr_and_port, const ChannelOptions* options);
int Init (const char* server_addr, int port, const ChannelOptions* options);

Diese Art von Init-Verbindungsserver hat oft eine feste IP-Adresse, erfordert keine Namensdienste und keinen Lastenausgleich und ist relativ einfach zu erstellen.

Erstellen Sie jedoch nicht häufig Kanäle mit Domänennamen. Dies erfordert eine DNS-Abfrage, die bis zu 10 Sekunden dauern kann (das Standard-Timeout für die DNS-Abfrage).

2. Stellen Sie eine Verbindung zum Cluster her

int Init (const char* naming_service_url,
const char* load_balancer_name,
const ChannelOptions* options);

Dieser Kanaltyp muss regelmäßig die Serverliste von dem durch naming_service_url angegebenen Namensdienst abrufen und einen Computer auswählen, um Anforderungen durch den durch load_balancer_name angegebenen Lastausgleichsalgorithmus zu senden.

Sie sollten solche Kanäle (um Cluster zu bedienen) nicht vor jeder Anfrage dynamisch erstellen. Da das Erstellen und Zerstören eines solchen Kanals mehr Ressourcen erfordert, z. B. den einmaligen Zugriff auf den Namensdienst bei der Erstellung,

Andernfalls wissen Sie nicht, welche Server verfügbar sind. Da Channel von mehreren Threads gemeinsam genutzt werden kann, besteht im Allgemeinen keine Notwendigkeit, ihn dynamisch zu erstellen.

Client-Einstellungen

(1) brpc:ChannelOptions wird verwendet, um Channel zu initialisieren

(2) brpc::Controller wird verwendet, um die Optionen in ChannelOptions in einem RPC zu überschreiben, die je nach Kontext jedes Mal unterschiedlich sein können

(3) Globale gflags werden verwendet, um das Verhalten einiger zugrunde liegender Codes anzupassen

Controller-Funktionen:

Ein Controller entspricht einem RPC, und es kann nur einen Benutzer geben.Der Standard-Thread ist nicht sicher.
Er kann nicht gemeinsam genutzt werden, daher können keine gemeinsam genutzten Zeiger verwendet werden.
Er wird erstellt, bevor der RPC startet, und zerstört, nachdem der RPC endet. Es gibt zwei Modi: a. Vor dem
synchronen RPC wird der Controller auf dem Stapel platziert und danach zerstört es geht aus dem Gültigkeitsbereich.
b. Vor dem asynchronen RPC ist der neue Controller fertig. löschen

Guess you like

Origin blog.csdn.net/machh/article/details/120489719
Recommended