Question

Puisque vous utilisez une boucle d'événement par opposition aux fils, comment l'aspect réel du serveur?

Je sais qu'il utilise une boucle d'événement, mais comment séparer les demandes? Et comment voulez-vous empêchez votre serveur de fonctionner très lentement (car, je suppose, ne peut pousser une chose à la fois depuis sa threadless?)

Une sorte de pseudo-code serait grand.

Pardonne mon ignorance; Bien sûr, s'il y a quelque part qui explique dans un non basique « cela suffit bien jusqu'à ce que vous obtenez 1000 visiteurs chemin », je serais heureux de savoir de lui.

Était-ce utile?

La solution

Les détails de mise en œuvre d'un long sondage serveur varierait tant de plate-forme à plate-forme que vos hypothèses pourraient ne pas être correcte.

Je mis en place un serveur COMET pour notre site en utilisant .NET. Je mis à profit HttpListener pour faire toutes les choses ennuyeux http et Microsoft CCR pour faire face à tous les async IO. Il utilise un pool de threads aux demandes de service comme et quand ils entrent en jeu. Ce n'est pas un fil par client, mais pas un seul thread soit nécessitant généralement quelques dizaines de fils pour rester fluide le nombre d'utilisateurs augmente. Ce moyen d'approche que nous ÉCHELLE facilement sur plusieurs cœurs de processeur. CCRs async motif recenseur vraiment aidé à garder la belle logique asynchrone et bien rangé, et je peux lire le code assez facilement un an plus tard.

Cette approche a été extrêmement évolutive. Je l'ai testé jusqu'à 20000 clients, après quoi nous sommes devenus liés par le réseau IO. Il gère tous nos clients (qui sont connectés « en permanence », reconnectant tous les 30 ans) le long tic-tac à 1-2% la charge du serveur. Il vaut vraiment la peine de reconsidérer votre hypothèse que vous devez choisir soit une architecture de boucle d'événements par opposition à plusieurs threads. Le terrain d'entente fonctionne très bien pour moi, et le . NET modèle de programmation asynchrone pour traiter IO Bound tâches vraiment vous emmène loin d'avoir besoin de fils micro-gérer. En effet, quand il y a des données IO à traiter, un fil est emprunté à la piscine pour faire que le traitement, et par la suite retourné à la piscine prête à desservir une autre demande. Tous les trucs IOCP compliqué est extrait loin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top