Client/Server Eventpolling.



  • Folgende Situation:

    Ich habe eine Server und eine Client Anwendung. Der Server stellt einen Webservice bereit über Http.
    Der Client verbindet sich, und kann Funktionen des Webservices abrufen.

    Der Client hat einen Polling Timer, mit dem er ständig eine serverseitige EventQueue auf neue Events abfrägt, und diese dann als Event auf dem Client feuert. Funktioniert auch wunderbar. Wenn sich der Client abmeldet, benachrichtig er den server das er die eventqueue "schliessen" kann, so das die queue nich unendlich groß wird, da der client ja die event rausnimmt.

    Wenn nun der Client abstürtzt, dann wird der Server nicht benachrichtig das er sich abgemeldet hat, und der Server haut die eventqueue voll bis der speicehr voll ist.. was könnte ich tun?

    Noch ein Timer auf dem Client der den Server ständig mit "IamAlive" event benachrichtig? Gibts noch andere Möglichkeiten?



  • EventPolling schrieb:

    Wenn nun der Client abstürtzt, dann wird der Server nicht benachrichtig das er sich abgemeldet hat, und der Server haut die eventqueue voll bis der speicehr voll ist.. was könnte ich tun?

    die que hat eine obergrenze und wenn lange keiner was abgeholt hat, schmeisst der server schmeisst einfach die ältesten einträge aus der queue raus.
    🙂



  • Der Server bekommt doch konstant IAmAlive Nachrichten - nämlich wenn der Client eine Message pollt. Dann ist das eine IAmAlive Nachricht.

    Und natürlich eine maximale größe der Queue - aber das ist sowieso klar



  • @Shadow: Stimmt hätte ich selber drauf kommen können.

    Ja ich begrenze die Queue mal auf 100 events. Gepolled wird im 50ms zyklus.
    d.h. würde alle 49ms eine event auftretten würden irgendwann die ältere verloren gehen.

    Was mir noch einfällt: Ich polle ja im 50ms zyklus, dabei feuer ich ein event und es wird eine funktion aufgerufen.Wenn nun die funktion länger als 50ms bräuchte, würde das Polling intervall ja langsamer werden. Aber da kann man nichts machen, man muss ja Kompromisse eingehen 🙂



  • EevntPolling schrieb:

    Was mir noch einfällt: Ich polle ja im 50ms zyklus, dabei feuer ich ein event und es wird eine funktion aufgerufen.Wenn nun die funktion länger als 50ms bräuchte, würde das Polling intervall ja langsamer werden. Aber da kann man nichts machen, man muss ja Kompromisse eingehen 🙂

    Du kannst asynchron pollen wenn das ein problem ist. aber 50ms, solange darf ein poll eigentlich nicht dauernd, sonst wäre ein event basiertes system wohl besser.

    die verarbeitung sollte sowieso asynchron ablaufen und wenn das polling < 50ms ist, kann man die polldauer ja vom interval abziehen...



  • Hi Shadow,

    ja das habe ich mir auch schon Überlegt. Aber ne Asyncrone lösung ist schwer umzusetzen oder? Ich programmiere das in C#, bin noch nich lang dabei.
    Ich habe es folgendermaßen umgesettzt:

    ServerEvent Klasse:

    - Timer mit einem Intervall von 50ms
    - Timer funktion holt sich so jede 50ms ein event aus der queue.
    - Danach feuert der timer eine Events über eine delegate.

    IM cliente wird eine funktion implementiert, welche auf das event des ServentKlase horcht. Aber wie bekomme ich das nun asyncron hin?? Müsste ich da nich mehrer Thread verwenden?


Log in to reply