Sockets: Verbindung neustarten



  • Hallo,

    ich habe über einen Socket eine bestehende Verbindung zu einem Server von dem ich kontinuierlich über http Daten anfordere. Jetzt kann es allerdings vorkommen, dass während der Server Daten sendet, die Verbindung "neu gestartet" werden muss, d.h. ich will die Daten inkl. http-Header neu erhalten.
    Ein erneuter Aufruf von connect () scheint hierfür nicht zu genügen, allerdings finde ich es auch ein bisschen umständlich den Socket zu schließen und neu zu initialisieren. Gibt es eine bequeme Methode, um dem Server vorzutäuschen, dass er eine neue Verbindung erhält und somit die Daten von Anfang an erneut senden muss?

    Danke



  • Nope.

    Wenn der Server HTTP 1.1 kann und die Verbindung offen hält kannst du mehrere Requests über eine Verbindung schicken. Allerdings erhältst du die Antwortdaten für den 2. Request auch erst wenn die Antwortdaten für den 1. Request komplett übertragen wurden.

    Ich weiss auch nicht was daran so umständlich sein soll die Verbindung zu trennen und neu herzustellen.



  • Erstmal danke für die Antwort.

    Leider verwenden die Server meist HTTP/1.0, welches afaik "Connection: Keep-Alive" nicht unterstützt (zumindest die Server, bei denen ich es bereits getestet habe).

    hustbaer schrieb:

    Ich weiss auch nicht was daran so umständlich sein soll die Verbindung zu trennen und neu herzustellen.

    Im Prinzip gar nichts. Ich weiß nur nicht, ob es nicht sehr rechenaufwendig ist, wenn das ganze ca. 60 mal pro Minute durchgeführt wird (auf verschiedene Server verteilt natürlich 😃 ).
    Muss ich zum Trennen der Verbindung den ganzen Socket zerstören, oder ist es auch möglich, über den gleichen Socket eine neue Verbindung aufzubauen?

    Danke



  • Ich kann dir nicht mit 100% Sicherheit sagen dass es NICHT möglich ist ohne den Socket zu zerstören, aber ich kenne keine andere Möglichkeit. Und ich persönlich würde es garnicht erst probieren -- nicht ohne guten Grund (und die Befürchtung dass es evtl. vielleicht ein wenig langsamer sein könnte als was anderes ist kein guter Grund, weil man sich meist umsonst Sorgen macht).

    Den Socket zerstören und neu anlegen wird nicht allzuviel Rechenzeit kosten -- verglichen mit dem ganzen "Connection herstellen" Prozess.



  • Unter Windows kannst du Sockets mit DisconnectEx oder TransmitFile resetten.



  • hustbaer schrieb:

    Den Socket zerstören und neu anlegen wird nicht allzuviel Rechenzeit kosten -- verglichen mit dem ganzen "Connection herstellen" Prozess.

    eine verbindung herzustellen kostet nicht viel rechenzeit. warum auch? es werden nur ganz kleine paketchen durch die gegend geschickt.
    🙂



  • netzwerk-fan schrieb:

    hustbaer schrieb:

    Den Socket zerstören und neu anlegen wird nicht allzuviel Rechenzeit kosten -- verglichen mit dem ganzen "Connection herstellen" Prozess.

    eine verbindung herzustellen kostet nicht viel rechenzeit. warum auch? es werden nur ganz kleine paketchen durch die gegend geschickt.
    🙂

    Lies meinen Satz nochmal, dann wirst du (hoffentlich) draufkommen warum deine Antwort mit meiner Aussage rein garnichts zu tun hat.

    "A dauert weniger lange als B" und "B geht sehr schnell" widersprechen sich in keiner Weise.



  • hustbaer schrieb:

    Lies meinen Satz nochmal, dann wirst du (hoffentlich) draufkommen warum deine Antwort mit meiner Aussage rein garnichts zu tun hat.

    lies du ihn auch, aber vor allem erkundige dich erst mal, was der begriff 'rechenzeit' bedeutet.
    🙂



  • rechenzeit ist salopp ausgedrückt die erzeugung von cpu last. und das ist bei der herstellung von netzwerkverbindung kaum der fall. die meiste zeit wird auf pakete gewartet.

    gedanken darüber zu machen, ob es viel rechenzeit kostet, eine verbindung ständig neu aufzubauen, kann man sich schenken. man kann sich höchstens darüber gedanken machen, ob so unnötig viele daten verschickt werden müssen und es somit zu verzögerungen kommen kann.

    sobald netzwerkzugriffe auf den plan treten, gibt es eigentlich nur noch eine regel: so wenige wie möglich, soviel cpu last erzeugen, wie möglich. wenn man durch aufwendige berechnungen auch nur eine anfrage an den server sparen kann, hat man meist nen speed-up.


Log in to reply