2010-06-15 10 views
2

Je veux créer une application client-serveur en utilisant des sockets sur la plate-forme .net et étant une nouveauté en programmation réseau et j'ai un dilemme. Le client enverra souvent des données au serveur et le serveur avertira souvent les clients. Quelle est la meilleure façon de le concevoir? Est-ce que le serveur devrait garder un fil pour communiquer avec chaque client jusqu'à ce qu'il se ferme ou juste que les clients envoient des données au serveur et mettent à jour les clients régulièrement (quelques secondes) ou aucun de ceux? De l'aide serait géniale. Merci les gars. PS: Le nombre de clients atteindra des milliers.conception d'application client-serveur

+0

Vous obtiendrez des informations beaucoup plus spécifiques sur ce que vous faites si vous nous en dire plus sur ce que vous voulez accomplir. –

Répondre

0

La façon dont je l'ai fait lorsque j'écrivais un serveur Web pour un projet était que vous avez votre thread principal sur le serveur qui écoute de nouvelles demandes. Une fois qu'une requête vient générer un nouveau thread et répondre au client à partir d'un port différent. Vous gardez ce 2ème thread en vie tant que votre client/serveur communique. Combien de temps cela dépend de beaucoup de choses. Aurez-vous des centaines ou des milliers de clients? Si c'est le cas, vous devriez fermer les threads/ports souvent. Mais si vous avez seulement quelques clients, gardez-les ouverts plus longtemps.

Je suppose que les données envoyées aux clients sont différentes pour chaque client. Si ses données sont identiques, vous devez utiliser UDP pour diffuser ces données à tous les clients à la fois.

3

La solution .net pour le type de conception que vous décrivez s'appelle Windows Communication Foundation, ou WCF pour faire court.

WCF permet des rappels asynchrones, ce qui serait une façon d'implémenter le type d'architecture que vous décrivez. J'ai fait la plupart de mon apprentissage sur WCF avec le livre Apprendre WCF, par Michele Bustamante. La WCF est très étendue et je recommanderais de ne pas tirer de la hanche sans une bonne référence.

+0

Michele Bustamante est génial. Ici, le livre est bon et ses webs sont super. Un grand nombre de bonnes infos sur son site web http://www.thatindigogirl.com/ – CkH

+0

Dans quelle situation iriez-vous pour une prise classique et non pas pour un wcf? – boo

+0

@nelly: J'aurais du mal à trouver une bonne raison d'utiliser la programmation socket classique ces jours-ci, à moins que vous ne parliez à un service existant –

0

Cela dépend. Est-ce que votre application dépend de l'entrée quand elle entre, peut-elle être réduite à des morceaux de code, peut-elle la gérer dans n'importe quel ordre, ..., beaucoup de choses encore inconnues de votre situation.

Les prises asynchrones ont des avantages, mais ne conviennent pas à tous les types d'applications.

Les douilles de blocage ont aussi leur mérite, sont plus simples à conceptualiser et à mettre en œuvre, et ont de nombreuses applications.

Vous devez d'abord identifier votre besoin, ce qui dictera la façon dont vous allez mettre en œuvre les choses à l'avenir.