407 messaggi dal 08 maggio 2003
Salve a tutti,
sto realizzando un server socket in vb.net per una poker room.
Il socket principale gestisce la lobby dove gli utenti si iscrivono ai tavoli, e la chat.
Poi man mano che le condizioni sono quelle corrette vanno partendo i vari tavoli da gioco.
Ora il mio dilemma è questo... cosa conviene fare per rendere il programma stabile e veloce: creare un socket diverso per ogni tavolo che si apre ( cambiando porta ) oppure creare un solo socket che gestisca tutti i tavoli ( oppure che gestisce un tot di tavoli, e solo appena si raggiunge il limite deciso per quel socket aprire un altro socket ) ?
Il mio interesse principale è che la soluzione sia il più stabile e veloce possibile in quanto si tratta di gestire anche 500 tavoli contemporaneamente.
Cosa mi consigliate di fare?

Grazie.
176 messaggi dal 04 giugno 2007
Contributi | Blog
Se ti dico che i server di Live Messenger che gestiscono la presenza sono in grado di gestire circa trenta milioni di connessioni contemporanee per box con una server app scritta in managed code ti basta?

L'idea di cambiare port per ogni tavolo mi suona male.
Ragioniamo in termini teorici per un attimo: il concetto di tavolo in questo ambito e' parte del modello di dati dell'application layer. Se tu lo implementassi come un port diverso o un socket diverso, l'implementazione di questo concetto sarebbe delegata al transport layer. A me non sembra una grande idea - se domani decidessi di usare un altro protocollo di trasporto dovresti riscrivere tutto.

Senza contare i problemi che avresti con i client dietro un firewall.

non so che data-rate devi trasferire, ma non penso sia stellare - il poker non e' esattamente real-time, e i dati da muovere sono pochi K alla volta.

Con un bilancio furbo tra completion port threads e user-mode thread per gestire le richieste, dovresti cavartela alla grande.

C'e' anche l'opzione di muovere tutto upstack e costruire un servizio WCF che gestisca lo stato dei tavoli venendo interpellato via un interfaccia REST dai client.

Saluti

--Alessandro
407 messaggi dal 08 maggio 2003
Quindi tu dici di utilizzare un unico socket e un unica porta e il programma che sta in ascolto su tale porta gestisce le richieste/risposte che arrivano per tutti i tavoli? Ho capito bene?
Potrei creare una classe "tavolo" con tutte le regole le mani i giocatori etc etc e crearne una nuova istanza quando mi serve.
Che dici?
Riguardo il WCF... come fai ad inoltrare a tutti i client le informazioni? La connessione con un WCF non è persistente.. o sbaglio?? Io fino ad oggi ho sempre fatto che per interrogare un WCF mi collego lo interrogo ricevo risposta e mi scollego. Non posso ricevere dati da un WCF stando "in ascolto".
Infatti in questo caso sarebbe lui che deve chiamarmi ogni qualvolta c'è un cambiamento... si può fare senza i socket e con un WCF?
Avevo pensato a mettere un timer che interrogasse ad ogni tick il WCF per i cambiamenti ma l ho sempre trovata una soluzione meno performante del socket che mi permette di ricevere le informazioni solo ed effettivamente quando ci sono.
Mi sembri molto esperto però in materia quindi mi rimetto ad un tuo ulteriore chiarimento!
Grazie!

Modificato da ancio il 07 febbraio 2009 00.47 -
407 messaggi dal 08 maggio 2003
Scusa se riprendo questo vecchio post ma mi sembrava più corretto che aprirne uno nuovo!
Riguardo questo argomento... che ne dici di un servizio WCF DUPLEX? Potrebbe sostenere la mole di traffico elevata che mi aspetto?

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.