Frage

Ich bin ein Web-Server in Java schreiben, und ich mag es HTTP unterstützen 1.1 Keep-Alive-Verbindungen. Aber wie kann ich sagen, wenn der Client sendet Anfragen für eine bestimmte Verbindung erfolgt? (Wie eine doppelte End-of-line oder etwas).

Hier können sehen, wie diese sehr Stackoverflow dunkle Frage behandelt - Antworten, für die auf Google, werden in technischen Spezifikationen und obskuren Sprache verstrickt. Ich mag eine plain-Englisch Antwort für einen Nicht-C-Programmierer:)


ich sehe. Das bestätigt meinen Verdacht auf die SocketTimeoutException verlassen zu haben. Aber ich war nicht sicher, ob es etwas, das ich auf vom Client verlassen konnte, dass es mit der Verbindung erfolgt an - die ich erlauben würden, um die Verbindungen zu schließen früher in den meisten Fällen - statt für den Timeout des Wartens. Dank

War es hilfreich?

Lösung

Wenn Sie den Aufbau Ihrer Server den Standard zu erfüllen, dann haben Sie eine Menge Informationen bekommen Sie hier bereits führen.

Einfach gesprochen, sollte es auf eine Zeit beruht, da eine Verbindung verwendet, und nicht so sehr auf der Ebene der Anforderungsdaten.

In einer längeren umständlichen Art und Weise, die praktische Erwägungen Abschnitt des HTTP / 1.1-Dokument hat für Sie einige Hinweise:

  

"Server wird in der Regel einig   Timeout-Wert, über die hinaus sie werden   nicht halten länger eine inaktive   Verbindung. Proxy-Server machen könnte   dies ein höherer Wert, da es wahrscheinlich ist,   dass der Client machen wird mehr   Verbindungen über den gleichen Server.   Die Verwendung von persistenten Verbindungen   stellt keine Anforderungen an die Länge   (Oder Existenz) dieser Time-out für   entweder der Client oder der Server. "

oder

  

"Wenn ein Client oder Server möchte   Time-out sollte es eine anmutige ausstellen   in der Nähe auf der Transportverbindung.   Clients und Server sollten beide   ständig achten Sie auf die andere Seite   der Transport der Nähe, und darauf reagieren   wie angemessen. Wenn ein Client oder Server   erkennt nicht die Nähe der anderen Seite   prompt könnte es unnötig verursachen   Ressource Drain im Netzwerk. "

Andere Tipps

  

Hier können sehen, wie diese sehr Stackoverflow dunkele Frage behandelt -. Antworten, für die auf Google, werden in technischen Spezifikationen verstrickt und obskure Sprache

Ich habe nur Ständige Verbindungen und dem " Verbindung: close“Header . Dieser Abschnitt ist drei Absätze lang, benutzt sehr einfache Sprache, und sagt Ihnen genau, was Sie wissen wollen.

  

Ich mag eine plain-Englisch Antwort für einen Nicht-C-Programmierer:)

Bei allem Respekt, Programmierung ist ein technisches Unterfangen, wo die Details sehr viel Materie. technische Dokumentation zu lesen, ist ein ganz wesentliches Geschick. Unter Berufung auf „plain English“ Fremd Interpretationen der Daten führt nur in Ihnen einen schlechten Job zu tun.

Sie schließen es, wann immer Sie möchten. Der Header gibt an, dass der Client bevorzugen Sie die Verbindung offen zu lassen, aber das erfordert nicht den Server zu erfüllen. Die meisten Server lassen Sie es für etwa 5-10 Sekunden geöffnet, einige nicht aufpasst, um es überhaupt nicht.

Sie sollten die RFCs Umgang mit der Keep-Alive-Funktion lesen. Ansonsten könnten Sie mit einem Server am Ende, die nicht wie erwartet funktionieren.

Wie @ [Stephen] hat bereits darauf hingewiesen, ist der Server frei, die Verbindung jederzeit schließen es wünscht (ok, nicht in der Mitte eines Request / Response-Paar obwohl). Das Gleiche gilt für die Kunden. Jede andere Lösung würde es dem Server oder der Client eine DoS auf der anderen Partei durchzuführen.

EDIT: Werfen Sie einen Blick auf den Anschlusskopf. Der Client (und der Server) können ein ordnungsgemäßes Schließen der Verbindung mit dem Kopffordern. Zum Beispiel Connection: close in der Anfrage ist eine Anfrage an den Server die Verbindung zu schließen, nachdem er die Antwort sendet.

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