| Autor |
Beitrag |
Croissant612
Hält's aus hier
Beiträge: 10
|
Verfasst: Mo 20.12.10 13:43
Hallo,
ich hoffe mal, mir kann hier irgendwer einen Denkanstoß für folgende Problematik geben:
Ich versuche eine simple Socketverbindung auf einem Port zu einem Server aufzubauen. Im Einsatz ist Serverseitig eine einfach abgeleitete Form von TCustomSocket.
Programmtechnisch scheint dies auch prinzipiell zu funktionieren (Diverse Testumgebungen funktionieren klaglos). Nur bei einer Verbindungskonstellation habe ich riesige Zeitdifferenzen serverseitig zwischen dem OnGetSocket und dem OnAccepted - Event. Hat jemand den Anflug einer Ahnung, wie es zu solchen Zeitdifferenzen kommen kann?
Mit freundlichen Grüßen
Ingo
|
|
Narses
      

Beiträge: 10184
Erhaltene Danke: 1259
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 20.12.10 14:39
Moin und  im Forum!
Croissant612 hat folgendes geschrieben : | | Ich versuche eine simple Socketverbindung auf einem Port zu einem Server aufzubauen. Im Einsatz ist Serverseitig eine einfach abgeleitete Form von TCustomSocket. |
Welche Komponente ist das nun genau oder was hast du verändert? Du verwendest also keinen (standard) TServerSocket bzw. TClientSocket aus der ScktComp, richtig?
Croissant612 hat folgendes geschrieben : | | Nur bei einer Verbindungskonstellation habe ich riesige Zeitdifferenzen serverseitig zwischen dem OnGetSocket und dem OnAccepted - Event. Hat jemand den Anflug einer Ahnung, wie es zu solchen Zeitdifferenzen kommen kann? |
Bischen wenig Infos...  Wenn du mit asynchronen Sockets auf Event-Basis arbeitest, dann hast du alle Vor- und Nachteile des Windows-Message-Systems.  Die Frage ist, wie stark ist die Anwendung (konkret: der Main-Thread) ausgelastet, wenn diese Timing-Probleme auftreten? Hier liegt normalerweise der Flaschenhals beim TServerSocket (wenn man keine eigene Thread-Klasse reinhängt, läuft das alles über den Main-Thread!).
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Croissant612 
Hält's aus hier
Beiträge: 10
|
Verfasst: Mo 20.12.10 14:49
Hi,
Narses hat folgendes geschrieben : | Moin und im Forum! |
Danke
Narses hat folgendes geschrieben : | Croissant612 hat folgendes geschrieben : | | Ich versuche eine simple Socketverbindung auf einem Port zu einem Server aufzubauen. Im Einsatz ist Serverseitig eine einfach abgeleitete Form von TCustomSocket. | Welche Komponente ist das nun genau oder was hast du verändert? Du verwendest also keinen (standard) TServerSocket bzw. TClientSocket aus der ScktComp, richtig? |
Prinzipiell schon. Die Ableitung besteht eigentlich nur daraus, dass der eigene Name verwendet wurde. Inhaltlich gibt es keine Unterschiede.
| Zitat: | Croissant612 hat folgendes geschrieben : | | Nur bei einer Verbindungskonstellation habe ich riesige Zeitdifferenzen serverseitig zwischen dem OnGetSocket und dem OnAccepted - Event. Hat jemand den Anflug einer Ahnung, wie es zu solchen Zeitdifferenzen kommen kann? | Bischen wenig Infos... Wenn du mit asynchronen Sockets auf Event-Basis arbeitest, dann hast du alle Vor- und Nachteile des Windows-Message-Systems. Die Frage ist, wie stark ist die Anwendung (konkret: der Main-Thread) ausgelastet, wenn diese Timing-Probleme auftreten? Hier liegt normalerweise der Flaschenhals beim TServerSocket (wenn man keine eigene Thread-Klasse reinhängt, läuft das alles über den Main-Thread!) |
Der MainThread tut gar nichts. Er läuft und lauscht. Mit Hilfe von Wireshark habe ich den Netzwerktraffic mitgeschnitten. Der Dreiwegeverbindungsaufbau geht reibungslos (Client an Server -> SYN, Server an Client ACK, Client an Server ACK). Normalerweise würde ich nach dem letzten ACK davon ausgehen, das alles gut ist und das "Accepted" Event kommt. Bei 99% aller Netzwerkkonstellationen ist das auch so. Nur bei einer nicht... und ich suche den Grund, was dafür verantwortlich sein könnte. Gibt es eventuell andere Foren/Newsgroups bei denen eine entsprechende Anfrage geeigneter platziert ist?
MfG
Ingo
Moderiert von Narses: Zitat repariert.
--- Moderiert von Narses: Beiträge zusammengefasst---
Hi,
Ergänzung: Die Verbindung läuft über eine VPN Verbindung. In eine Richtung läuft alles klaglos, in die andere nicht. Ich schätze schon, dass die Firewall da eine Rolle spielt, kann aber beim besten Willen nicht erkennen, wo die mir in die Suppe spucken könnte.
MfG
Ingo
|
|
Narses
      

Beiträge: 10184
Erhaltene Danke: 1259
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 20.12.10 15:28
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Croissant612 
Hält's aus hier
Beiträge: 10
|
Verfasst: Mo 20.12.10 15:48
Hi,
| Zitat: | | Also ist es ein TServerSocket? |
Jo.
| Zitat: | Gar nichts erscheint mir sehr unwahrscheinlich, denn die Ereignisse laufen alle im MainThread auf (wenn es denn ein TServerSocket ist). Hier wäre dann wohl doch mal etwas Code hilfreich. |
Der Mainthread macht in dem Augenblick echt nichts, als auf eine Verbindung zu warten. Es werden nur die Events mit einer Logausgabe ausgewertet.
| Zitat: | | Wenn du mit Wireshark am Protokoll gelauscht hast und die passenden Pakete da sind, ist ein Problem im Umfeld der Maschine bzw. des Systems, dass nicht zeitnah die Ereignisse erzeugt, wahrscheinlich. |
Ja, das dachte ich mir  Ich bin auch im Blindflug unterwegs und auf der Suche nach Ideen, ob und unter welcher Voraussetzung jemand ein solches Verhalten schonmal gesehen hat.
Das System ist ein Windows 2008 Server SP2. Verbinde ich die beiden Rechner im gleichen Netzwerksegment ist alles gut.
Ich vermute, dass irgendeine Firewall oder whatever dazwischenfunkt, habe aber keinen Anhaltspunkt wonach ich suchen kann. Es scheint irgendetwas zu geben, dass das Event verzögert/verhindert. Bzw. auf Windowsebene scheint neben dem SYN - ACK Spiel noch irgendetwas anderes notwendig zu sein, um die Verbindung zu akzeptieren...
Mit freundlichen Grüßen
Ingo Horn
|
|
Narses
      

Beiträge: 10184
Erhaltene Danke: 1259
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 20.12.10 16:12
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Croissant612 
Hält's aus hier
Beiträge: 10
|
Verfasst: Mo 20.12.10 16:45
Hi,
Tracert etc ist alles unproblematisch und findet mit akzeptablem Zeitverhalten statt.
Sowohl Server, als auch Clientseitig sind keinerlei Probleme auf Netzwerkebene zu sehen... Außer eben diesem merkwürdigen Verhalten, dass das onAccept Event erst elend spät kommt.
Immer noch verwunderte Grüße
Ingo
|
|
Narses
      

Beiträge: 10184
Erhaltene Danke: 1259
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 20.12.10 16:59
Moin!
Croissant612 hat folgendes geschrieben : | | Außer eben diesem merkwürdigen Verhalten, dass das onAccept Event erst elend spät kommt. |
In welchen Dimensionen bewegt sich "elend spät" denn eigentlich objektiv?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Croissant612 
Hält's aus hier
Beiträge: 10
|
Verfasst: Mo 20.12.10 17:14
Hoi,
Die Differenz liegt bei sieben Sekunden. Ich habe mittlerweile den Contivity VPN Client als eventuellen Verursacher im Verdacht. Da dieser u.A. auch alle Netzwerkverbindungen, die nicht in direktem Zusammenhang mit der VPN Verbindung stehen kappt, fürchte ich, dass der auch auf der Ebene seine Finger im Spiel hat.
MfG
Ingo
|
|
Narses
      

Beiträge: 10184
Erhaltene Danke: 1259
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 20.12.10 17:27
Moin!
Croissant612 hat folgendes geschrieben : | | Die Differenz liegt bei sieben Sekunden. |
Croissant612 hat folgendes geschrieben : | | Ich habe mittlerweile den Contivity VPN Client als eventuellen Verursacher im Verdacht. Da dieser u.A. auch alle Netzwerkverbindungen, die nicht in direktem Zusammenhang mit der VPN Verbindung stehen kappt, fürchte ich, dass der auch auf der Ebene seine Finger im Spiel hat. |
Ist denn die Verbindung, die da so lagged, die, die über den VPN-Tunnel geht? Dann ist klar, warum das im selben Netz ohne Probleme klappt.
Wie man das jetzt allerdings behebt?! Tja...  könnte auch ein Bug im VPN-Client sein.
Du könntest das mal mit blocking-socket-calls probieren, statt non-blocking, dazu wirst du allerdings den Indy-TCP-Server nehmen müssen.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
ALF
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Mo 20.12.10 17:57
@Croissant612
Du solltest dort www.delphipraxis.net...ent.html#post1069542 evtl noch mitteilen das dies ein Crosspost ist. Sonst gibt es Missverständnisse hier und dort
Gruss ALf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
|