<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Design &amp; Architecture</title><link>https://www.dotnetzone.gr:443/cs/forums/16/ShowForum.aspx</link><description>Θέματα αρχιτεκτονικής και σχεδιασμού εφαρμογών (design patterns, object orientation, κ.α.)</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Google Talk</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/15354.aspx</link><pubDate>Tue, 01 Aug 2006 03:57:22 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:15354</guid><dc:creator>Dimitris Papadimitriou</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/15354.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=15354</wfw:commentRss><description>Ναι, δεν είπα κάτι διαφορετικό. Απλά ρωτάω αν ο τρόπος που λειτουργεί το google talk ένα μήνυμα σε ένα client είναι ότι δεν το στέλνει αλλά το ζητάει συνεχώς ο client με μια κλήση ajax.</description></item><item><title>Απ: Google Talk</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/15349.aspx</link><pubDate>Tue, 01 Aug 2006 01:45:40 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:15349</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/15349.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=15349</wfw:commentRss><description>&lt;P&gt;&lt;BLOCKQUOTE&gt;&lt;table width="85%"&gt;&lt;tr&gt;&lt;td class="txt4"&gt;&lt;img src="/cs/Themes/default/images/icon-quote.gif"&gt;&amp;nbsp;&lt;strong&gt;papadi wrote:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="quoteTable"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" class="txt4"&gt;Μήπως γνωρίζετε τι κάνει το google talk σε αυτή την περίπτωση (επικοινωνία server&amp;gt;&amp;gt;client). Πως φτάνει το μήνυμα που έγραψε ο χρήστης Α στον χρήστη Β; Στέλνει συνεχώς ο B&amp;nbsp;AJAX μήνυμα στον server για δει αν υπάρχει κάτι γι αυτόν; ...ή είπα βλακεία!;;;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Μπορείς να φανταστείς ότι το AJAX ουσιαστικά είναι μια κλήση/request στο server από τον client με την χρήση JavaScript και ο τύπος των δεδομένων που μεταφέρεται είναι XML...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;George J.&lt;BR&gt;&lt;/P&gt;</description></item><item><title>Απ: Επικοινωνία Client&gt;&gt;Server και Server&gt;&gt;Client - Caching</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/15348.aspx</link><pubDate>Tue, 01 Aug 2006 01:34:54 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:15348</guid><dc:creator>Dimitris Papadimitriou</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/15348.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=15348</wfw:commentRss><description>Είμαι πολύ κοντά σε μια λύση που θα μπορεί να λειτουργήσει σε real-time μόνο με ένα webservice στον server, οπότε μόνο με την πόρτα 80. Αν θέλει κανείς λεπτομέρειες πριν το ολοκληρώσω ας μου στείλει ένα προσωπικό μήνυμα.&lt;br /&gt;
&lt;br /&gt;
Σε κάθε περίπτωση θα γράψω εδώ την γενική ιδέα όταν βεβαιωθώ ότι μπορεί να παίξει.</description></item><item><title>Απ: Google Talk</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/15346.aspx</link><pubDate>Tue, 01 Aug 2006 01:12:35 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:15346</guid><dc:creator>Dimitris Papadimitriou</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/15346.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=15346</wfw:commentRss><description>&lt;P&gt;&lt;BLOCKQUOTE&gt;&lt;table width="85%"&gt;&lt;tr&gt;&lt;td class="txt4"&gt;&lt;img src="/cs/Themes/default/images/icon-quote.gif"&gt;&amp;nbsp;&lt;strong&gt;Dimitris wrote:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="quoteTable"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" class="txt4"&gt;Η λύση του polling (2) δεν μου ακούγεται καλή. Έχεις μια κεντρική οντότητα (server) που δέχεται συνεχώς κλήσεις από πολλές περιφεριακές οντότητητες (clients). Σκέψου οτι έχεις 1000 clients να κάνουν κλήσεις ανα 30" και έχεις ενα server που πρέπει να εξυπηρετεί 33 κλήσεις το δευτερόλπτο. Το μεγαλύτερο ποσοστό απο αυτές δε θα είναι μάλλον άχρηστες. Μεγάλη σπατάλη bandwidth και network resources γενικά.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Πολύ σωστό. Είναι όμως και αυτή μια λύση, αν κανείς έχει να κάνει με το πολύ 10 χρήστες.&lt;BR&gt;&lt;BR&gt;&lt;BLOCKQUOTE&gt;&lt;table width="85%"&gt;&lt;tr&gt;&lt;td class="txt4"&gt;&lt;img src="/cs/Themes/default/images/icon-quote.gif"&gt;&amp;nbsp;&lt;strong&gt;Dimitris wrote:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="quoteTable"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top" class="txt4"&gt;Το καλύτερο είναι να χρησημοποιήσεις remoting (δεν ξέρω πως λέγεται στο .net), να δηλώνεις από τον κάθε client ένα remote object στον server το οποίο εκείνος στη συνέχεια θα το χρησιμοποιεί ως "event listener" οταν και εφόσον είναι απαραίτητο.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Και στο .net έτσι λέγεται (.net remoting). Αυτό όμως απαιτεί επιπλέον ανοιχτή πόρτα σε firewall αν θέλουμε να στείλουμε μηνύματα από τον server στον client. Έστι δεν είναι; Ουσιαστικά είναι η λύση Νο1. Θα το σημειώσω πιο συγκεκριμένα.&lt;/P&gt;</description></item><item><title>Απ: Google Talk</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/15345.aspx</link><pubDate>Tue, 01 Aug 2006 00:37:24 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:15345</guid><dc:creator>Dimitris</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/15345.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=15345</wfw:commentRss><description>Η λύση του polling (2) δεν μου ακούγεται καλή. Έχεις μια κεντρική οντότητα (server) που δέχεται συνεχώς κλήσεις από πολλές περιφεριακές οντότητητες (clients). Σκέψου οτι έχεις 1000 clients να κάνουν κλήσεις ανα 30" και έχεις ενα server που πρέπει να εξυπηρετεί 33 κλήσεις το δευτερόλπτο. Το μεγαλύτερο ποσοστό απο αυτές δε θα είναι μάλλον άχρηστες. Μεγάλη σπατάλη bandwidth και network resources γενικά.&lt;br /&gt;
&lt;br /&gt;
Το καλύτερο είναι να χρησημοποιήσεις remoting (δεν ξέρω πως λέγεται στο .net), να δηλώνεις από τον κάθε client ένα remote object στον server το οποίο εκείνος στη συνέχεια θα το χρησιμοποιεί ως "event listener" οταν και εφόσον είναι απαραίτητο.</description></item><item><title>Google Talk</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/15343.aspx</link><pubDate>Mon, 31 Jul 2006 21:46:01 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:15343</guid><dc:creator>Dimitris Papadimitriou</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/15343.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=15343</wfw:commentRss><description>Μήπως γνωρίζετε τι κάνει το google talk σε αυτή την περίπτωση (επικοινωνία server&amp;gt;&amp;gt;client). Πως φτάνει το μήνυμα που έγραψε ο χρήστης Α στον χρήστη Β; Στέλνει συνεχώς ο B&amp;nbsp;AJAX μήνυμα στον server για δει αν υπάρχει κάτι γι αυτόν; ...ή είπα βλακεία!;;;</description></item><item><title>Απ: Επικοινωνία Client&gt;&gt;Server και Server&gt;&gt;Client</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/15275.aspx</link><pubDate>Fri, 28 Jul 2006 02:07:01 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:15275</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/15275.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=15275</wfw:commentRss><description>&lt;P&gt;Θα μπορούσες να συνδιάσεις το 3 και το 4: &lt;/P&gt;
&lt;P&gt;Σε ένα web request δεν έχουμε μόνο για απάντηση το "200-Ok, successful connection"&amp;nbsp;και το "404-Not found". Μπορούμε να χρησιμοποιήσουμε και την σειρά 300. Στην σειρά 300 έχουμε τα μηνύμα "301-Moved permanently", "302-Moved temporarily" και "304-Not modified". Αν ο server πάρει ένα request για ένα dataset και δει ότι δεν έχει ανανεωθεί, μπορεί να απαντήσει με ένα λάθος 304. O client, με error handling, μπορεί να καταλάβει ότι δεν έλαβε data και το λάθος αυτό σημαίνει ότι τα δεδομένα δεν άλλαξαν.&lt;/P&gt;
&lt;P&gt;Ο παραπάνω τρόπος χρησιμοποιήται ευρέως με τα πρωτόκολλα που βασίζονται στο http, όπως στο RSS...&lt;/P&gt;
&lt;P&gt;Βέβαια θα μπορούσε να υλοποιήσεις το παραπάνω και πιο απλά, δηλαδή κάθε φορά που θα κάνεις ένα request να περνάς και ένα timestamp - πότε έλαβες την τελευταία φορά δεδομένα. Όταν δεν υπάρχουν αλλαγές στα δεδομένα,&amp;nbsp;ο server μπορεί να απαντά στο request, με ένα άδειο dataset για να υποδηλώσει ότι δεν έχεις αλλαγές στα δεδομένα.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;George J.&lt;BR&gt;&lt;/P&gt;</description></item><item><title>Απ: Επικοινωνία Client&gt;&gt;Server και Server&gt;&gt;Client</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/15269.aspx</link><pubDate>Thu, 27 Jul 2006 23:30:49 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:15269</guid><dc:creator>Dimitris Papadimitriou</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/15269.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=15269</wfw:commentRss><description>&lt;P&gt;Σε ευχαριστώ για την απάντηση.&lt;BR&gt;&lt;BR&gt;Είναι όντως και αυτή μια λύση, αλλά απαιτεί κλήση στον server πριν χρησιμοποιηθεί ένα cached στοιχείο. Αυτό σημαίνει ότι, τουλάχιστον για μικρά cached data, χάνεται το νόημα του caching, αφού αν είναι να ρωτήσω αν είναι valid, ας τα μην κάνω καθόλου caching και ας τα παίρνω πάντα fresh.&lt;/P&gt;
&lt;P&gt;Την πρόσθεσα στη λίστα μου στο παραπάνω μήνυμα για να είναι πιο ολοκληρωμένο.&lt;/P&gt;</description></item><item><title>Απ: Επικοινωνία Client&gt;&gt;Server και Server&gt;&gt;Client</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/15266.aspx</link><pubDate>Thu, 27 Jul 2006 22:32:32 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:15266</guid><dc:creator>agmarios</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/15266.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=15266</wfw:commentRss><description>Νομίζω ότι στα client - server μοντέλα καλό είναι ο server να μην στέλνει μόνο τους στοιχεία παρά μόνο αν του ζητηθούν. οπότε μπορείς πριν χρησιμοποιήσεις τα cached data να ρωτήσεις τον server αν εξακολουθούν να είναι έγκυρα ή αν χρειάζονται ενημέρωση.</description></item><item><title>Επικοινωνία Client&gt;&gt;Server και Server&gt;&gt;Client - Caching</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/15264.aspx</link><pubDate>Thu, 27 Jul 2006 22:08:42 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:15264</guid><dc:creator>Dimitris Papadimitriou</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/15264.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=16&amp;PostID=15264</wfw:commentRss><description>&lt;P&gt;Μια διερευνητική ερώτηση για ένα θέμα που ίσως σας έχει απασχολήσει.&lt;/P&gt;
&lt;P&gt;Έστω μια client/server εφαρμογή όπου ο client επικοινωνεί με τον server. Στέλνει "εντολές" τύπου "SaveDataset", "GetData", "MakeMeRich" κλπ. κλπ. (η τελευταία πετάει System.NotImplementedException). Διάφορα πράγματα γίνονται cached στον client. Π.χ. ένα πολύ κοινό table που δεν αλλάζει συχνά. Όταν όμως αλλάξει προκύπτει η ανάγκη να ενημερωθεί ο client για να ενημερωθεί, έτσι ώστε να το διαγράψει από την Cache του και να&amp;nbsp;το ξαναπάρει όταν το χρειαστεί. Σκέφτομαι τρεις λύσεις:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Ανοίγω ένα δεύτερο κανάλι επικοινωνίας (π.χ. ένα επιπλέον web service με τον client σαν web server ή πιο εύκολα .net remoting channel)&amp;nbsp;στο οποίο ο client να λαμβάνει μηνύματα σε real-time 
&lt;OL&gt;
&lt;LI&gt;+&amp;nbsp;real-time 
&lt;LI&gt;+ ο server ξέρει ότι ο client είναι σε λειτουργία (κάτι σαν ping) 
&lt;LI&gt;-&amp;nbsp;security issue. Ίσως η πολιτική ασφάλειας του δικτύου του πελάτη να μην το επιτρέπει&lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;Ο Client στέλνει μήνυμα στον server ανά 30" και βλέπει αν υπάρχει κάτι για αυτόν 
&lt;OL&gt;
&lt;LI&gt;+ δεν χρειάζονται επιπλέον ρυθμίσεις στο δίκτυο 
&lt;LI&gt;+ ο server ξέρει ότι ο client είναι σε λειτουργία (κάτι σαν ping) 
&lt;LI&gt;- ο client καθυστερεί να ειδοποιηθεί 
&lt;LI&gt;&lt;FONT color=#000080&gt;(από Dimitris)&lt;/FONT&gt; -&amp;nbsp;αύξηση network traffic και φόρτου στον server. λύση μόνο για λίγους χρήστες&lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;Αν το πρωτόκολλο επικοινωνίας είναι web services, ο server προσθέτει κάτι σαν header σε οποιαδήποτε απάντηση στέλνει στον client, όταν αυτός του ζητήσει κάτι 
&lt;OL&gt;
&lt;LI&gt;+ δεν χρειάζονται επιπλέον ρυθμίσεις στο δίκτυο 
&lt;LI&gt;+/- ο client λαμβάνει την αλλαγή σχετικά γρήγορα (όποτε ζητηθεί κάτι από τον server)&lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;(από agmarios)&lt;/FONT&gt; Κλήση server πριν τη χρήση ενός cached item για να ελεγχθεί αν είναι ακόμα valid 
&lt;OL&gt;
&lt;LI&gt;+ τα cached data είναι ενημερωμένα πριν χρησιμοποιηθούν 
&lt;LI&gt;-&amp;nbsp;για μικρού όγκου cached data χάνεται το νόημα του caching, μια που το overhead για να χρησιμοποιηθούν είναι σημαντικό.&lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;"Σκέφτεστε τίποτα καλύτερο" ή "Έτσι σας αρέσει;" &lt;img src="/cs/emoticons/emotion-22.gif" alt="Beer" /&gt;&lt;/P&gt;</description></item></channel></rss>