2008-11-12 12 views
1

Pendant undergrad j'ai choisi de suivre un cours de programmation de réseau en utilisant les douilles POSIX pour linux. À titre de référence, nous avons utilisé le livre Internetworking en utilisant TCP/IP (comer et stevens). 2008 est un texte assez daté et encore applicable qui passe par plusieurs conceptions de serveur.Méthodologies de conception d'application de serveur

Une conception qui n'est pas réellement présentée dans le livre est le cas où un client se connecte au serveur d'application principal envoie plusieurs demandes au serveur via une connexion TCP unique. Comme plusieurs demandes arrivent via le socket esclave au serveur et que les réponses sont envoyées via le même socket esclave. La socket esclave devient encombrée en réponse et les demandes sont reçues via le même socket, serait-ce une meilleure option pour permettre une deuxième connexion TCP entre les points d'extrémité to pour permettre une vitesse de communication en duplex intégral? Quelles autres architectures peuvent être utilisées pour améliorer les performances du serveur?

Répondre

2

Puisqu'un socket est simplement un nombre attaché à un paquet (appelez-le un numéro de routage ou une adresse), je ne peux pas imaginer le socket lui-même congestionné.

Votre code gérant le socket pourrait, mais cela devrait être facilement réparé en distribuant les paquets dès leur arrivée.

Vous pouvez également coder le traitement des paquets entrants et sortants sur des threads différents, ou même des paquets de file d'attente pour les distribuer à de nombreux threads.

Mais je ne vois vraiment pas la supposition originale comme étant complètement précise. Je peux me tromper ...

1

Les connexions TCP sont déjà en duplex intégral. Vous pourriez (simplifier) ​​penser à une connexion TCP comme une paire de connexions unidirectionnelles (une émission et une réception).

L'envoi de plusieurs demandes via une seule connexion est en fait utilisé pour pour augmenter les performances dans plusieurs protocoles (puisque la remise en service d'une connexion évite les frais généraux d'établissement de liaison et de démarrage lent). Un exemple serait des connexions HTTP persistantes. Une autre façon d'augmenter les performances est d'utiliser le pipelining (envoi de plusieurs requêtes sans attendre les réponses), ce qui ne peut évidemment être fait que si vous réutilisez la connexion TCP pour plusieurs requêtes.