Bestimmen der Mitwirkenden zur verstrichenen Zeit während einer Netzwerkanfrage

329
Aaron Johnson

Die Situation:

  • Es gibt einen Remote-Server.
  • Ich führe ein Client-Programm aus, das den Server aufruft und Daten anfordert.
  • Diese Anforderungen sind sehr langsam.
  • Der Server begrenzt die Anzahl der Ergebnisse auf 50 und paginiert den Rest. Wenn also insgesamt 300 Ergebnisse vorliegen, muss ich insgesamt 6 separate Anfragen stellen.
  • (Per James 'Kommentar) Die Daten liegen im JSON-Textformat vor.
  • (Per James 'anderer Kommentar) Die Verbindung ist eine https (SSL) -Verbindung.

Der Eigentümer des Servers hat angeboten, die Anzahl der Ergebnisse pro Seite zu erhöhen, damit ich weniger Anfragen stellen kann.

Obwohl ich denke, dass dies helfen wird, mache ich mir Sorgen, dass die Transaktion für meine Zwecke immer noch nicht schnell genug ist. Ich frage mich: Was ist, wenn das Problem nicht der Server-Overhead für das Abrufen von Daten ist? Was ist, wenn der größte Erfolg bei der Leistung auf Netzwerkbandbreite und Latenz zurückzuführen ist?

Wie würde ich das herausfinden? Ich habe überhaupt keinen Zugriff auf den Server. Nehmen wir an, eine Anfrage dauert 3 Sekunden. Dann:

  1. Welcher Teil dieser 3 Sekunden wird mit dem Öffnen der TCP-Verbindung verbracht?
  2. Welcher Teil wird für das Senden der Anforderungsdaten ausgegeben?
  3. Welcher Teil wird für das Warten auf den Server aufgewendet, um die Daten abzurufen?
  4. Welcher Teil wird aufgewartet, bis alle angeforderten Daten auf meinem Computer angekommen sind?

Ich möchte nicht unbedingt meinen eigenen TCP / IP-Code rollen müssen, um den Zugriff auf niedriger Ebene zu erhalten, der für solche Messungen erforderlich ist.

Ich bin mir sicher, dass dafür Werkzeuge geschrieben werden müssen. Während ich mit Google arbeite, sehe ich Programme wie netstat, ss, netperf, ttcp usw. Aber ich bin nicht einmal sicher, welche Wörter in einer Google-Suche verwendet werden sollen, um nach Lösungen für dieses Problem zu suchen.

Irgendwelche Ideen?

0
Angenommen, es hängt von den von Ihnen angeforderten Daten ab. Wenn Sie Json-Text zurückgeben, ist dies wahrscheinlich keine Bandbreitenbegrenzung und weitere Verarbeitungsbeschränkungen auf der Serverseite. Es ist zwar keine vollständige Lösung, aber etwas wie Wireshark (http://www.wireshark.org/) hilft Ihnen dabei, den Netzwerkverkehr zu überwachen und Pakete in der richtigen Reihenfolge zu protokollieren. Sie könnten dann Zeitmarken miteinander vergleichen, um zu sehen, welcher Abschnitt des Prozesses die meiste Zeit in Anspruch nimmt. James vor 11 Jahren 1
Es gibt JSON-Text zurück. Ich werde den Post aktualisieren, um das zu reflektieren. Packet Capture in Wireshark ist eine gute Idee. Ich werde es versuchen. Aaron Johnson vor 11 Jahren 0
Oh, und ich würde auch hinzufügen, dass das Aushandeln eines SSL-Handshakes mit jeder Anfrage zweifellos einen Overhead verursacht. Sie geben nicht an, ob dies http: // oder https: // ist. James vor 11 Jahren 0
Guter Punkt. https. Ich werde die Frage aktualisieren, um auch das zu reflektieren. Aaron Johnson vor 11 Jahren 0
In diesem Fall kann die Verringerung der Anzahl von Anforderungen und die Erhöhung der Ergebnismenge für jede einzelne eine erhebliche Auswirkung haben James vor 11 Jahren 0
Ich denke, Ihr Problem hängt wahrscheinlich mit der Abfrage zusammen, oder in der Art und Weise, wie Sie die Ergebnismenge verarbeiten (indem Sie dies auf der Clientseite erledigen, anstatt die DB die Arbeit erledigen zu lassen). Wie lange dauert die Ausführung Ihrer Abfrage, wenn Sie sie von einer DB-Verwaltungskonsole aus aufrufen, während sie in den Server übertragen wird? Wenn Ihre Site nicht erheblich belastet wird, sind Faktoren wie die Verbindungserstellungszeit, das Einspeisen von Daten auf das Kabel, die https-Aushandlung usw. zu vernachlässigen. Wenn Sie Ihre Abfragen korrekt erstellen und ausführen, sollten viele kleine Verbindungen schneller sein als eine große. Ihre Verspätung wartet fast sicher auf eine Antwort. Frank Thomas vor 11 Jahren 0
Aaron: Zu Ihrem Kommentar zu SO: Wenn Sie dieselbe Frage auf mehreren Stack Exchange-Sites gleichzeitig posten, verstoßen Sie gegen die Regeln. Wenn Sie der Meinung sind, dass Sie mit der falschen Site begonnen haben, können Sie Ihre Frage mit einem * kennzeichnen * und einen Moderator bitten, diese auf eine andere Site zu migrieren. Manchmal können Sie Ihre Frage auch weiterhin auf einer Site * löschen * und auf einer anderen Website posten. Die Migration ist wahrscheinlich die schönere Lösung, insbesondere wenn bereits Antworten oder Kommentare vorhanden sind. Wenn Sie diese Frage zum Stack Overflow (* anstelle von Super User) haben möchten, lassen Sie es mich wissen. Daniel Beck vor 11 Jahren 0
Daniel: Danke für informative Kommentare und gute Informationen hier. Ich habe den Link, den Sie in Ihren ursprünglichen Kommentar bei SO eingetragen haben, nicht bemerkt und bis heute morgen nicht gelesen. Wie es aussieht, habe ich bei SO keine Antworten erhalten. Andrew schloss die Frage, sie könnte aber auch einfach gelöscht werden. Danke für Ihre Hilfe. Aaron Johnson vor 11 Jahren 0

0 Antworten auf die Frage