AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Sockets verwalten (WSAAsyncSelect vs WSAEventSelect)
Thema durchsuchen
Ansicht
Themen-Optionen

Sockets verwalten (WSAAsyncSelect vs WSAEventSelect)

Ein Thema von Mr_G · begonnen am 19. Jul 2008 · letzter Beitrag vom 24. Jul 2008
 
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Sockets verwalten (WSAAsyncSelect vs WSAEventSelect)

  Alt 19. Jul 2008, 23:56
Danke erstmal für die ganzen neuen Denkanstöße!
Zitat von Apollonius:
Ich vermute mal, dass der Service handgestrickt ist, also ohne VCL.
Stimmt...
Zitat von Apollonius:
Dann würde ich WSAEventSelect nehmen.
Aus dem Event den Socket zu finden, ist kein Problem. Du speicherst in einer Liste die Sockets und die Event-Handles. WSAWaitForMultipleEvents gibt bei Erfolg den Index des Events, und damit des Sockets, zurück.
Das war ja die Möglichkeit 2, die ich angegeben hab. Mir stellt sich die Frage ob das nicht viel zu aufwendig ist bei jedem auslösen des Events die Liste zu durchsuchen.
Zitat von Apollonius:
Du könntest aber auch ein globales Event statt einem pro Socket verwenden. Wenn das Event signalisiert wird, kannst du mit der Funktion Select herausfinden, in welche Sockets du schreiben kannst und bei welchen Daten anliegen.
Die Funktion sieht interessant aus aber ich verstehe leider nicht wie ich mit FD_SET umgehen muss. In der WinSock Unit handelt es sich bei FD_SET um eine procedure die ein Socket übergeben bekommt. Ist damit das Listenersocket gemeint von dem alle weiteren Verbindungen das Event geerbt haben
Zitat von Apollonius:
Oder du rufst zu jedem Socket WSAEnumNetworkEvents auf. Du würdest damit viele Events sparen, was in jedem Fall zu begrüßen ist.
Das hört sich irgendwie nicht so gut an... ich habe mir dazu mal das passende Beispiel in der MSDN angesehen und so wie ich das verstehe würde sich das bei vielen Verbindungen auch schwer tun. Ich hab das ganze nämlich so vestanden, dass dabei auch für jedes Socket ein Event erzeugt wird und anschließend alle Sockets durchlaufen werden. Dabei wird bei jedem Socket 1 Sekunde auf das entsprechende Event gewartet und wenn etwas signalisiert wurde, wird WSAEnumNetworkEvents genutzt um herauszufinden was alles seit dem letzten Aufruf passiert ist. Ich kann mich um die Uhrzeit auch schon völlig verschätzen aber für mich würde das bedeuten, das z.B. im Falle von 30 Verbindungen, bei denen Verbindung 30 Daten überträgt, im schlechtesten Falle erst für jede Verbindug davor gewartet wird (29 Sekunden lang !?) und dann evtl. aufgetretene Events bei Verbindung 30 bearbeitet werden.
Zitat von Apollonius:
Threads kannst du dir eigentlich nur leisten, wenn du wenige Sockets hast. Threads benötigen eine ganze Menge Ressourcen.
Ich hab mich auch da schonmal umgesehen gehabt und meine da sowas wie WorkerThreads bzw. einen Threadpool gefunden zu haben. Ich glaube es war in dem Tutorial von Luckie. Leider weiß ich auch dabei nicht ob es sich um eine echte Alternative handelt.
Ich wäre für jeden Fingerzeig dankbar!
Gruß

Mr_G
Jan
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz