2011-12-16 3 views
1

Comment un serveur Web sert son client en utilisant le même port (80) pour une connexion TCP. Pour une connexion UDP, je comprends qu'il n'y a pas de connexion en soi, de sorte que plusieurs clients peuvent envoyer des paquets sur le même port. Si j'essaie d'utiliser un port déjà utilisé sur mon hôte local, j'obtiens BindException.Comment toutes les demandes se connectent-elles à un serveur Web utilisant le même port?

Une solution que je vois à ceci est de commencer un fil pour chaque connexion, mais ce ne serait pas lourd pour un site comme google/yahoo où il ya> 100000 connexions dans chaque serveur?

Quelles solutions les serveurs Web utilisent-ils pour résoudre ce problème?

+0

Vous voulez donc beaucoup de paquets UDP sur le même port? De différents clients? – SuperTron

+0

Nopes. C'était juste une comparaison avec UDP. Ma question principale est de savoir comment cela se fait dans les connexions TCP –

Répondre

2

Le serveur écoute sur un port bien connu (80) et de déléguer la demande à un socket de travail une fois qu'il reçoit la demande.Ainsi, il peut servir la demande suivante.Vous pouvez écrire votre propre serveur simple pour comprendre ce qui se passe. ex code suffisant. [1]

[1] http://java.sun.com/developer/technicalArticles/Networking/Webserver/WebServer.java

premier il crée une socket serveur;

ServerSocket ss = new ServerSocket(port); 

puis il est listé sur le port spécifié et crée un nouveau socket une fois qu'il a accepté la requête;

Socket s = ss.accept(); 

Comme le montre le code, il dispose d'une piscine de thread de travail, donc à un moment donné, vous pouvez contrôler le nombre de demande être servis par le serveur à un moment donné. D'autres attendent dans une file d'attente peut être.

2

Vous avez seulement un port pour l'écoute, mais une connexion a deux ports, un de chaque côté de la connexion. Ce pare doit être unique. Par exemple, si vous vous connectez au port google.com 80, votre connexion aura un port sur votre machine, par exemple 42312 et le port 80 sur google.com. Vous pouvez voir vos connexions avec netstat -a. Pour obtenir une liste plus courte: netstat -an | grep RECONNU » Ce qui montre toutes les connexions établies sans résoudre leurs adresses IP aux noms.

1

AFAIK, Apache will start a new thread for every request, ce qui est une grande raison pour que l'événement serveurs conduit comme Node.js sont un little faster. Google et Yahoo ont également TONNES de serveurs et Ce que dit Roger a aussi du sens, bien que je ne sois pas sûr à 100% sur les détails de la façon dont exactement google sur le port 42312 atteindra votre ordinateur au port 80: P

+0

Je ne pense pas avoir dit que google ferait une sortie sur le port 42312 qui atteindrait le port 80n sur le client. J'ai dit le contraire. Donc je (étant le client) serais paquets avec le port source 42312, port de destination 80. Google (lors de la réponse) enverrait bien sûr avec la source 80 et la destination 42312. –

+0

Ah a du sens, mal compris. Mon erreur. – SuperTron

Questions connexes