Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Επικοινωνία Client>>Server και Server>>Client - Caching

Îåêßíçóå áðü ôï ìÝëïò Dimitris Papadimitriou. Τελευταία δημοσίευση από το μέλος Dimitris Papadimitriou στις 31-07-2006, 20:57. Υπάρχουν 9 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  27-07-2006, 15:08 15264

    Επικοινωνία Client>>Server και Server>>Client - Caching

    Μια διερευνητική ερώτηση για ένα θέμα που ίσως σας έχει απασχολήσει.

    Έστω μια client/server εφαρμογή όπου ο client επικοινωνεί με τον server. Στέλνει "εντολές" τύπου "SaveDataset", "GetData", "MakeMeRich" κλπ. κλπ. (η τελευταία πετάει System.NotImplementedException). Διάφορα πράγματα γίνονται cached στον client. Π.χ. ένα πολύ κοινό table που δεν αλλάζει συχνά. Όταν όμως αλλάξει προκύπτει η ανάγκη να ενημερωθεί ο client για να ενημερωθεί, έτσι ώστε να το διαγράψει από την Cache του και να το ξαναπάρει όταν το χρειαστεί. Σκέφτομαι τρεις λύσεις:

    1. Ανοίγω ένα δεύτερο κανάλι επικοινωνίας (π.χ. ένα επιπλέον web service με τον client σαν web server ή πιο εύκολα .net remoting channel) στο οποίο ο client να λαμβάνει μηνύματα σε real-time
      1. + real-time
      2. + ο server ξέρει ότι ο client είναι σε λειτουργία (κάτι σαν ping)
      3. - security issue. Ίσως η πολιτική ασφάλειας του δικτύου του πελάτη να μην το επιτρέπει
    2. Ο Client στέλνει μήνυμα στον server ανά 30" και βλέπει αν υπάρχει κάτι για αυτόν
      1. + δεν χρειάζονται επιπλέον ρυθμίσεις στο δίκτυο
      2. + ο server ξέρει ότι ο client είναι σε λειτουργία (κάτι σαν ping)
      3. - ο client καθυστερεί να ειδοποιηθεί
      4. (από Dimitris) - αύξηση network traffic και φόρτου στον server. λύση μόνο για λίγους χρήστες
    3. Αν το πρωτόκολλο επικοινωνίας είναι web services, ο server προσθέτει κάτι σαν header σε οποιαδήποτε απάντηση στέλνει στον client, όταν αυτός του ζητήσει κάτι
      1. + δεν χρειάζονται επιπλέον ρυθμίσεις στο δίκτυο
      2. +/- ο client λαμβάνει την αλλαγή σχετικά γρήγορα (όποτε ζητηθεί κάτι από τον server)
    4. (από agmarios) Κλήση server πριν τη χρήση ενός cached item για να ελεγχθεί αν είναι ακόμα valid
      1. + τα cached data είναι ενημερωμένα πριν χρησιμοποιηθούν
      2. - για μικρού όγκου cached data χάνεται το νόημα του caching, μια που το overhead για να χρησιμοποιηθούν είναι σημαντικό.

    "Σκέφτεστε τίποτα καλύτερο" ή "Έτσι σας αρέσει;" Beer


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  27-07-2006, 15:32 15266 σε απάντηση της 15264

    Απ: Επικοινωνία Client>>Server και Server>>Client

    Νομίζω ότι στα client - server μοντέλα καλό είναι ο server να μην στέλνει μόνο τους στοιχεία παρά μόνο αν του ζητηθούν. οπότε μπορείς πριν χρησιμοποιήσεις τα cached data να ρωτήσεις τον server αν εξακολουθούν να είναι έγκυρα ή αν χρειάζονται ενημέρωση.
  •  27-07-2006, 16:30 15269 σε απάντηση της 15266

    Απ: Επικοινωνία Client>>Server και Server>>Client

    Σε ευχαριστώ για την απάντηση.

    Είναι όντως και αυτή μια λύση, αλλά απαιτεί κλήση στον server πριν χρησιμοποιηθεί ένα cached στοιχείο. Αυτό σημαίνει ότι, τουλάχιστον για μικρά cached data, χάνεται το νόημα του caching, αφού αν είναι να ρωτήσω αν είναι valid, ας τα μην κάνω καθόλου caching και ας τα παίρνω πάντα fresh.

    Την πρόσθεσα στη λίστα μου στο παραπάνω μήνυμα για να είναι πιο ολοκληρωμένο.


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  27-07-2006, 19:07 15275 σε απάντηση της 15269

    Απ: Επικοινωνία Client>>Server και Server>>Client

    Θα μπορούσες να συνδιάσεις το 3 και το 4:

    Σε ένα web request δεν έχουμε μόνο για απάντηση το "200-Ok, successful connection" και το "404-Not found". Μπορούμε να χρησιμοποιήσουμε και την σειρά 300. Στην σειρά 300 έχουμε τα μηνύμα "301-Moved permanently", "302-Moved temporarily" και "304-Not modified". Αν ο server πάρει ένα request για ένα dataset και δει ότι δεν έχει ανανεωθεί, μπορεί να απαντήσει με ένα λάθος 304. O client, με error handling, μπορεί να καταλάβει ότι δεν έλαβε data και το λάθος αυτό σημαίνει ότι τα δεδομένα δεν άλλαξαν.

    Ο παραπάνω τρόπος χρησιμοποιήται ευρέως με τα πρωτόκολλα που βασίζονται στο http, όπως στο RSS...

    Βέβαια θα μπορούσε να υλοποιήσεις το παραπάνω και πιο απλά, δηλαδή κάθε φορά που θα κάνεις ένα request να περνάς και ένα timestamp - πότε έλαβες την τελευταία φορά δεδομένα. Όταν δεν υπάρχουν αλλαγές στα δεδομένα, ο server μπορεί να απαντά στο request, με ένα άδειο dataset για να υποδηλώσει ότι δεν έχεις αλλαγές στα δεδομένα.

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  31-07-2006, 14:46 15343 σε απάντηση της 15264

    Google Talk

    Μήπως γνωρίζετε τι κάνει το google talk σε αυτή την περίπτωση (επικοινωνία server>>client). Πως φτάνει το μήνυμα που έγραψε ο χρήστης Α στον χρήστη Β; Στέλνει συνεχώς ο B AJAX μήνυμα στον server για δει αν υπάρχει κάτι γι αυτόν; ...ή είπα βλακεία!;;;
    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  31-07-2006, 17:37 15345 σε απάντηση της 15343

    Απ: Google Talk

    Η λύση του polling (2) δεν μου ακούγεται καλή. Έχεις μια κεντρική οντότητα (server) που δέχεται συνεχώς κλήσεις από πολλές περιφεριακές οντότητητες (clients). Σκέψου οτι έχεις 1000 clients να κάνουν κλήσεις ανα 30" και έχεις ενα server που πρέπει να εξυπηρετεί 33 κλήσεις το δευτερόλπτο. Το μεγαλύτερο ποσοστό απο αυτές δε θα είναι μάλλον άχρηστες. Μεγάλη σπατάλη bandwidth και network resources γενικά.

    Το καλύτερο είναι να χρησημοποιήσεις remoting (δεν ξέρω πως λέγεται στο .net), να δηλώνεις από τον κάθε client ένα remote object στον server το οποίο εκείνος στη συνέχεια θα το χρησιμοποιεί ως "event listener" οταν και εφόσον είναι απαραίτητο.
  •  31-07-2006, 18:12 15346 σε απάντηση της 15345

    Απ: Google Talk

     Dimitris wrote:
    Η λύση του polling (2) δεν μου ακούγεται καλή. Έχεις μια κεντρική οντότητα (server) που δέχεται συνεχώς κλήσεις από πολλές περιφεριακές οντότητητες (clients). Σκέψου οτι έχεις 1000 clients να κάνουν κλήσεις ανα 30" και έχεις ενα server που πρέπει να εξυπηρετεί 33 κλήσεις το δευτερόλπτο. Το μεγαλύτερο ποσοστό απο αυτές δε θα είναι μάλλον άχρηστες. Μεγάλη σπατάλη bandwidth και network resources γενικά.

    Πολύ σωστό. Είναι όμως και αυτή μια λύση, αν κανείς έχει να κάνει με το πολύ 10 χρήστες.

     Dimitris wrote:
    Το καλύτερο είναι να χρησημοποιήσεις remoting (δεν ξέρω πως λέγεται στο .net), να δηλώνεις από τον κάθε client ένα remote object στον server το οποίο εκείνος στη συνέχεια θα το χρησιμοποιεί ως "event listener" οταν και εφόσον είναι απαραίτητο.

    Και στο .net έτσι λέγεται (.net remoting). Αυτό όμως απαιτεί επιπλέον ανοιχτή πόρτα σε firewall αν θέλουμε να στείλουμε μηνύματα από τον server στον client. Έστι δεν είναι; Ουσιαστικά είναι η λύση Νο1. Θα το σημειώσω πιο συγκεκριμένα.


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  31-07-2006, 18:34 15348 σε απάντηση της 15264

    Απ: Επικοινωνία Client>>Server και Server>>Client - Caching

    Είμαι πολύ κοντά σε μια λύση που θα μπορεί να λειτουργήσει σε real-time μόνο με ένα webservice στον server, οπότε μόνο με την πόρτα 80. Αν θέλει κανείς λεπτομέρειες πριν το ολοκληρώσω ας μου στείλει ένα προσωπικό μήνυμα.

    Σε κάθε περίπτωση θα γράψω εδώ την γενική ιδέα όταν βεβαιωθώ ότι μπορεί να παίξει.
    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  31-07-2006, 18:45 15349 σε απάντηση της 15343

    Απ: Google Talk

     papadi wrote:
    Μήπως γνωρίζετε τι κάνει το google talk σε αυτή την περίπτωση (επικοινωνία server>>client). Πως φτάνει το μήνυμα που έγραψε ο χρήστης Α στον χρήστη Β; Στέλνει συνεχώς ο B AJAX μήνυμα στον server για δει αν υπάρχει κάτι γι αυτόν; ...ή είπα βλακεία!;;;

    Μπορείς να φανταστείς ότι το AJAX ουσιαστικά είναι μια κλήση/request στο server από τον client με την χρήση JavaScript και ο τύπος των δεδομένων που μεταφέρεται είναι XML...

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  31-07-2006, 20:57 15354 σε απάντηση της 15349

    Απ: Google Talk

    Ναι, δεν είπα κάτι διαφορετικό. Απλά ρωτάω αν ο τρόπος που λειτουργεί το google talk ένα μήνυμα σε ένα client είναι ότι δεν το στέλνει αλλά το ζητάει συνεχώς ο client με μια κλήση ajax.
    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems