Na verdade, estou aprendendo redes de computadores e, enquanto estou nisso, estou confuso em como um servidor da web mantém várias conexões?
Simplesmente, eu aprendi através de uma pesquisa no Google que os soquetes lidam com uma solicitação de cada cliente.
Digamos que exista um servidor Web e digamos 2 clientes com IPs
Client A: 5.5.5.5
Client B: 10.10.10.10
Ambos tentam se conectar ao servidor na porta 80.
Agora, ao pesquisar no Google, o servidor escuta na porta 80 os pedidos recebidos. Digamos que um cliente A tente se conectar ao servidor (faça a conexão TCP / IP). Durante o qual um soquete é criado entre esses dois. Em seguida, ele é executado como um encadeamento separado para sua comunicação adicional, fazendo com que o servidor escute novamente outras solicitações de clientes nessa porta específica. E o cliente B se conecta da mesma maneira.
Agora minha primeira pergunta é:
1. How does server communicate with these two clients simultaneously
after the connection has been established?
Agora praticamente não apenas 2 clientes, mas milhares e milhões de usuários podem se conectar a um servidor.
Então minha próxima pergunta é:
2. Now, how do those thousands of clients get connected to a single server?
If we assume every client is connected to the server through wire, it is not
practically possible to maintain that many sockets on a hardware for
connection. How those thousands connections are made and handled?
Por fim, minha terceira pergunta é:
3. Above I said (actually heard) how **client A** connected to the the server
and similarly the client B.
But I didn't get the part stating "after a TCP/IP connection is made they
continue separately in a separate socket and making server to listen for
other client requests." What does that mean? If one client is communicating
to the server, how come other can communicate at the same time to same server.
Isn't it like while a student is asking question to a teacher, other can't
ask at the same time since that particular student is busy or occupying the
teacher at the moment so others should wait, which we compare than client B
should wait when client A is communicating.
Estas são minhas perguntas básicas que não estou recebendo. Por favor, corrija-me se estou entendendo tudo errado. Você pode me sugerir alguns livros / pdfs para ler se as respostas são detalhadas ou não focadas em partes específicas. obrigado
Respostas:
De fato, mais especificamente, existe um tipo especial de soquete chamado soquete "de escuta".
Normalmente, um soquete está associado a uma combinação de IP local, porta local, IP remoto e porta remota.
Uma tomada de audição é diferente. Não está associado a nenhum IP e porta remotos específicos. Está associado a uma porta local específica. Pode ou não estar associado a um IP local específico.
Normalmente, o servidor da Web terá um soquete de escuta com uma porta local de 80
Um par de soquetes, na verdade, um no cliente, outro no servidor.
O aplicativo cliente cria um soquete e solicita ao sistema operacional do cliente que o conecte ao servidor.
O sistema operacional do cliente aloca uma porta local aleatória, escolhe um IP local (normalmente com base em qual interface o pacote será enviado) e preenche o IP remoto e a porta solicitados pelo aplicativo cliente. Em seguida, inicia o processo de conexão com o servidor.
O sistema operacional do servidor notifica o titular do soquete de escuta de que uma nova conexão está chegando. O aplicativo do servidor aceita a conexão e um novo soquete é criado para lidar com isso.
Vários threads ou mesmo processos podem monitorar o mesmo soquete de listagem. O sistema operacional garantirá que exatamente um deles aceite uma determinada conexão.
Isso depende do implementador do aplicativo do servidor. Eles podem optar por usar vários threads ou podem optar por usar uma API como "select" ou "poll" que permite que um único thread monitore vários soquetes quanto à atividade.
O sistema operacional do servidor corresponderá os pacotes aos soquetes pela combinação do IP de origem, porta de origem, IP de destino e porta de destino e os entregará no soquete apropriado.
"Soquete" neste contexto não se refere a um soquete físico, apenas a uma estrutura de dados dentro do sistema operacional.
Ainda existem limites, milhares são facilmente executáveis em um servidor moderno, milhões ficam difíceis.
Os computadores são muito melhores em desviar a atenção do que as pessoas. Obviamente, se o servidor tiver apenas um núcleo de processador, ele poderá fazer apenas uma coisa de cada vez, mas se puder alternar entre as coisas com rapidez suficiente, os clientes não perceberão isso.
E, é claro, muitos servidores hoje em dia têm vários núcleos de processador.
Parece que o problema é que o rfc difere da prática real em sua definição de soquete.
Eu apenas procurei a documentação para "accept" para os três principais sistemas operacionais, todos eles falam sobre aceitar a criação de um novo soquete.
http://man7.org/linux/man-pages/man2/accept.2.html
https://www.freebsd.org/cgi/man.cgi?query=accept&sektion=2
https://msdn.microsoft.com/en-us/library/windows/desktop/ms737526%28v=vs.85%29.aspx
fonte