Frage

Ich baue eine .NET-Remoting-Client / Server, der Tausende von Dateien, von unterschiedlicher Größe (alles von wenigen Bytes bis zu Hunderten von MB), und ich möchte ein Feedback über die beste Methode wird die Übertragung für die Erreichung Dies. Wie ich es sehe, gibt es ein paar Optionen:

  • Serialize die gesamte Datei in mein Objekt und Remotesende bei auf einmal, unabhängig von ihrer Größe. Dies würde wahrscheinlich die schnellste sein, aber ein Fehler bei der Übertragung erfordert, dass die gesamte Datei mit keiner Weise neu übertragen werden, werden wieder aufzunehmen.
  • Wenn die Dateigröße größer ist als etwas klein (wie 4 KB), bricht sie in 4-KB-Blöcke und Fern diese, wieder zusammenbauen auf dem Server. Neben die Komplexität dieses, ist es langsamer, weil die fortgesetzten Rundreisen und Bestätigungen, wenn ein Ausfall eines Stückes nicht viel Zeit verschwenden.
  • Einschließlich so etwas wie ein FTP oder SFTP-Server mit meiner Anwendung - der Client den Server mitteilen, dass es beginnt mit Remote, laden Sie die Datei, dann Remoting der Fertigstellung zu informieren. Ich möchte alles in meiner App enthalten stattdessen einen separaten FTP-Dienst zu erfordern, aber ich bin offen für diese Option, wenn es gebraucht wird.
  • Verwenden Sie eine Art angegebenen TCP-Verbindung oder WPF oder einem anderen Übertragungsverfahren, das die Fehler zu handhaben integriert ist oder in der Lage ist, eine Art von Checkpoint / Resume tun.
  • Jede andere fehlt mir?

Was sind die flexibelste / zuverlässigen Übertragungsverfahren? Ich bin nicht so über die Geschwindigkeit betrifft, aber mehr über die Zuverlässigkeit - Ich möchte die Datei zu bewegen, auch wenn es langsam ist. Da der Client und Server mit mehreren Threads sein, kann ich mehrere Dateien gleichzeitig übertragen, wenn die Verbindung zulässt.

Vielen Dank für Ihr Feedback. - Ich in einem Kopfgeld werfen Sie einige Empfehlungen, wie Menschen würde dies erreichen zu bekommen

War es hilfreich?

Lösung

Andere Tipps

Obwohl calmh die Frage nicht beantworten Sie von der OSI-Schicht 4 Seite des Lebens sind zu fragen, ich fühle mich eher wie Sie mehr zu den Anwendungsebenen in Ihrer Frage suchen. TCP hat definitiv Griff alles aus der Latenz bis hin Übertragungsfenster, usw. auf der Netzwerk-Seite des Lebens. Allerdings ist es nicht direkt bestimmen, was passiert, wenn ein Benutzer eine Download-Sitzung vorzeitig beendet und dann entscheidet es später abholen, wo sie aufgehört hat.

Um Ihre Frage aus einem anderen Blickwinkel zu beantworten, ich würde auf jeden Fall empfehlen, die Datei in einzelne Abschnitte Chunking und indizieren sie für alle Verbindungen, unabhängig von der Geschwindigkeit. Sie können dann auf dem Client wieder neu zusammengesetzt werden, wenn die gesamte Datei heruntergeladen wird. Dies ermöglicht den Benutzer der Pause Download-Sitzungen und Lebenslauf.

Was die Geschwindigkeit zu bestimmen, kann es Methoden, dies zu tun Vorgefertigte, aber eine Methode könnten Sie ist verwenden Sie einfach Ihren eigenen Geschwindigkeitstest bauen: Senden 1 MB an den Client (Upload) und habe es eine Antwort sendet einmal empfangen. 1100 durch die Zeit, die geteilt, um die Rückantwort von Client zu erhalten, ist das KB / s es die Client-Download vom Server erfolgt. Und umgekehrt, um Test-Upload vom Client aus.

Was Übertragungs, würde ich empfehlen, vorhandene Technologien nutzen. SFTP Abstützungen authentifizierte verschlüsselte Datenübertragung . Es ist im Grunde FTP, aber über SSH. Es soll dies für die Interaktion APIs verfügbar irgendwo sein.

Auf einer Seite beachten, ich habe noch nie etwas in dem Maße geschehen, dass Sie reden, aber hoffentlich meine Ideen zumindest geben Ihnen ein paar Optionen zu prüfen.

Dies ist, was TCP selbst wird für und für über Jahrzehnte oder harte Tests abgestimmt. Remoting ist für kleine RPC-Aufrufe, soweit sie nicht die Übertragung großer Dateien. Sie sollten einfach eine TCP-Socket verwenden, um die Daten zu übertragen, und lassen Sie die Protokolle der unteren Schichten sorgen sich um Latenz, Übertragungsfenster, MTU, etc.

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