Seite 1 von 1
Socket Queue Position prüfen.
Verfasst: Montag 29. August 2005, 12:56
von flyingfish
Hallo,
hab ein client server system, welches über einen Socket kommuniziert.
Kann ich irgendwie herausfinden, an welcher Position der Socketqueue die Clientanfrage eingegliedert wird?
Danke,
Flyingfish
Verfasst: Freitag 2. September 2005, 11:46
von henning
Sorry, ich verstehe deine Frage ehrlich gesagt nicht :-/
Kannst du da vielleicht ein bisschen Pseude-code geben oder ein bisschen genauer erklären, was du meinst?
Verfasst: Montag 5. September 2005, 12:06
von flyingfish
Nun ja, jeder erstellte Socket kann ja eine Anzahl von Verbindungen queuen und arbeitet diese dann ab. Wenn ein Client nun eine neue Verbindung aufbaut, wollte ich gerne wissen, wieviele Verbindungen es schon gibt.
Gruss,
Flyingfish
Verfasst: Montag 5. September 2005, 13:39
von BlackJack
flyingfish hat geschrieben:Nun ja, jeder erstellte Socket kann ja eine Anzahl von Verbindungen queuen und arbeitet diese dann ab. Wenn ein Client nun eine neue Verbindung aufbaut, wollte ich gerne wissen, wieviele Verbindungen es schon gibt.
Geht soviel ich weiss nicht. Habe jedenfalls nichts in den man-pages zu `sockets` gefunden. Und wenn es von C aus schon nicht geht...
Wozu brauchst Du die Information denn?
Verfasst: Montag 5. September 2005, 14:28
von rayo
öhm der server horcht ja auf einem port, wenn eine verbindung aufgebaut wird erstellt er ein socket. normalerweise queued der server bis max 5 clients gleichzeitig, nacher wird ein socket erstellt. du musst einfach all diese erstellten sockets zählen, dann hast du die anzahl aktiven verbindungen.
Gruss
Verfasst: Montag 5. September 2005, 19:44
von Leonidas
Das erinnert mich aber eher an den Twisted/Asyncore-Ansatz mit Protocols und Factories, so das die Factory auf dem Post lauscht und wenn sich jemand verbindet wird eine Protocol-Instanz gestartet und ihr diese Anfrage übergeben.. aber sowas meist du doch nicht, oder?
Verfasst: Montag 5. September 2005, 23:34
von BlackJack
rayo hat geschrieben:öhm der server horcht ja auf einem port, wenn eine verbindung aufgebaut wird erstellt er ein socket. normalerweise queued der server bis max 5 clients gleichzeitig, nacher wird ein socket erstellt. du musst einfach all diese erstellten sockets zählen, dann hast du die anzahl aktiven verbindungen.
Ich hatte die Frage so verstanden, dass das Queueing/Puffern von Verbindungsanfragen beim Betriebssystem gemeint war. Man kann bei Server-Sockets angeben, das sich das Betriebssystem eine vorgegebene Anzahl von Verbindungsversuchen merkt solange man gerade eine Anfrage bearbeitet und diese "ge-queuet-en" Verbindungen dann bei den folgenden `listen()` Aufrufen zurückgibt.
Das ist Hauptsächlich dazu da, damit in der kurzen Zeit während der `listen()` Aufruf die Anfrage zum Beispiel an einen Thread zur Bearbeitung übergibt, keine Clients abgewiesen werden. Sonst hätte man bei Servern mit einer hohen Anfragerate dauernd Fehlversuche bei den Clients.
Falls das nicht die Frage war, dann bitte präzisieren...
Verfasst: Dienstag 6. September 2005, 06:54
von rayo
Ja schon, aber was nützt einem diese Anzahl? Die sind ja nur für eine extrem kurze Zeit da. Mehr als 5 gibt man dort in der Regel nicht an.
Gruss
Verfasst: Dienstag 6. September 2005, 10:20
von flyingfish
Hallo Leute,
ja Blackjack, das war meine Frage. Sobald die Anfrage da ist, wird ein C Block bearbeitet, und somit gibt es wartezeiten von circa 1 Minute.
Aber vielleicht sollte ich noch eine Queue einfügen und das C Programm in einem Thread laufen lassen. Ist vielleicht ansonsten etwas unsauber.
Was meint Ihr?
Gruss,
Flyingfish
Verfasst: Dienstag 6. September 2005, 23:01
von BlackJack
flyingfish hat geschrieben:ja Blackjack, das war meine Frage. Sobald die Anfrage da ist, wird ein C Block bearbeitet, und somit gibt es wartezeiten von circa 1 Minute.
Aber vielleicht sollte ich noch eine Queue einfügen und das C Programm in einem Thread laufen lassen. Ist vielleicht ansonsten etwas unsauber.
Was meint Ihr?
Eine Minute ist schon ziemlich lang. Kommt natürlich darauf an wieviele Clients Du ewartest, wenn das nur 1-2 pro Minute sind, dann würde das so wohl noch ganz gut funktionieren, aber wenn es skalieren soll, dann sind Arbeits-Threads und eine Queue wohl die bessere Lösung.
Dann kannst Du auch ganz einfach mitzählen wieviele Clients gerade bearbeitet werden oder noch in der Queue stecken.
Verfasst: Mittwoch 7. September 2005, 00:02
von flyingfish
Alles klar, dann werde ich das wohl so machen.
Herzlichen Dank euch allen!