Ein Kollege fragte mich plötzlich: Wie kodiere ich asynchrone Netzwerkanfragen?

Dieser Artikel wurde von der Huawei Cloud Community „ Asynchronous Network Request Coding “ geteilt, Autor: Zhang Jian.

In diesem Artikel werden gängige Techniken zur Kodierung von asynchronen Netzwerkanforderungen vorgestellt. Obwohl Sprachen wie Golang Coroutinen unterstützen, ermöglichen sie dem Programmierer, Code synchron zu schreiben, wodurch die mentale Belastung des Programmierers erheblich verringert wird. Allerdings ist Batchverarbeitung in der Netzwerkprogrammierung weit verbreitet, was bedeutet, dass auch in Golang Coroutinen umgeschaltet werden müssen, um Batch-Anforderungen zu erfüllen. In Golang werden Schnittstellen häufig in Form von Rückrufen der Außenwelt zugänglich gemacht.

Ob es sich um einen Rückruf, die Rückgabe einer Zukunft, die Rückgabe von Mono/Flux oder das Lesen aus einem Kanal handelt, es handelt sich hierbei um unterschiedliche asynchrone Programmierparadigmen. Beim Codieren können Sie diese wiederum aus dem Gesamtprojekt, dem Codierungsstil des Teams und persönlichen Vorlieben berücksichtigen. Dieser Artikel konzentriert sich auf Rückrufe, es ist jedoch nicht schwierig, ihn auf andere asynchrone Codierungsparadigmen zu übertragen.

Nach Verwendung des Rückrufmodus ist die Signatur der externen Methode ähnlich:

gehen

func (c *Client) Get(ctx context.Context, req *Request, Callback func(resp *Response, err error)) Fehler

Java

öffentliche Schnittstelle Client {
    void get(Request req, Callback callback);
}

Batch in der Netzwerkprogrammierung

Bei Netzwerkanfragen kann die Stapelverarbeitung die Leistung verbessern. Bei der Stapelverarbeitung werden mehrere Anfragen oder Aufgaben gruppiert und als eine einzige Arbeitseinheit verarbeitet. Batch ist für Benutzer so transparent wie möglich. Benutzer müssen Batch nur einfach konfigurieren und müssen sich nicht um die Implementierungsdetails von Batch kümmern.

Gängige Batch-bezogene Konfigurationen

  • Batch-Intervall: Batch-Zeitintervall, z. B. alle 1 Sekunde, Batch einmal
  • Batchgröße: Die maximale Größe des Batches, zum Beispiel maximal 100 Anfragen pro Batch

Batch kann durch geplante Aufgaben implementiert werden, und es können auch einige Optimierungen vorgenommen werden. Wenn sich beispielsweise keine Anforderungen in der Warteschlange befinden, werden die geplanten Aufgaben angehalten, und wenn Anforderungen vorliegen, werden die geplanten Aufgaben gestartet.

Codierungsdetails

Der Gesamtprozess sieht ungefähr wie folgt aus:

async-network-code.png

Stellen Sie sicher, dass Sie die Anfrage zuerst in die Warteschlange/Map stellen

Vermeiden Sie es, zu schnell auf Netzwerkanfragen zu reagieren, da dies dazu führen könnte, dass die Antwort empfangen wird, bevor der Rückruf registriert wird.

Nachrichten in der Warteschlange müssen über einen Timeout-Mechanismus verfügen

Dies verhindert, dass Anfragen aus Gründen wie Paketverlust nicht reagieren, was dazu führt, dass immer mehr Anfragen in der Warteschlange stehen und schließlich ein Speicherüberlauf auftritt.

Der Lebenszyklus der Warteschlange stimmt mit dem zugrunde liegenden Lebenszyklus des Netzwerk-Clients überein

Die Anforderungen in der Warteschlange müssen an den Client angehängt werden. Sobald der Client neu erstellt wurde, muss auch die Warteschlange neu erstellt werden und die fehlgeschlagenen Rückrufe von Callback und Future auslösen.

Klicken Sie hier, um zu folgen und so schnell wie möglich mehr über die neuen Technologien von Huawei Cloud zu erfahren~

 

Der Autor eines bekannten Open-Source-Projekts verlor seinen Job aufgrund von Manie – „Suche nach Geld online“ No Star, No Fix 2023 Die zehn besten technischen Errungenschaften der Welt werden veröffentlicht: ChatGPT, Hongmeng Operating System, China Space Station und andere ausgewählte ByteDance wurden von OpenAI „verboten“. Google kündigt die beliebteste Chrome-Erweiterung im Jahr 2023 an Akademiker Ni Guangnan: Ich hoffe, dass inländische SSD importierte HDD ersetzen wird, um Xiaomi-Mobiltelefon BL zu entsperren? Stellen Sie zunächst eine Interviewfrage für Java-Programmierer. Arm hat mehr als 70 chinesische Ingenieure entlassen und plant, sein chinesisches Softwaregeschäft neu zu organisieren. OpenKylin 2.0 enthüllt | UKUI 4.10 Doppeldiamantendesign, schön und hochwertig! Manjaro 23.1 veröffentlicht, Codename „Vulcan“
{{o.name}}
{{m.name}}

Supongo que te gusta

Origin my.oschina.net/u/4526289/blog/10322945
Recomendado
Clasificación