¿Cómo funciona el servidor de chat de Facebook?

Un servidor puede soportar más de 65,535 conexiones concurrentes, ya que para TCP no es el número de puertos en los que puede escuchar ese es el factor decisivo. En cambio, es la combinación única de dirección y puerto en AMBOS equipos de origen y de destino.

Por ejemplo:

tcp 0 0 X.73.2.71: 59537 X.17.196.92: 80 ESTABLECIDO 24791 / google-chrome
tcp 0 0 X.73.2.71: 59520 X.17.196.92: 80 ESTABLECIDO 24791 / google-chrome
tcp 0 0 X.73.2.71: 59519 X.17.196.92: 80 ESTABLECIDO 24791 / google-chrome
tcp 0 0 X.73.2.71: 59482 X.17.196.92: 80 ESTABLECIDO 24791 / google-chrome

Aquí tengo cuatro conexiones abiertas al mismo servidor en el mismo puerto; lo que es diferente es MI número de puerto desde el que se origina la solicitud.

Todas las solicitudes web van al puerto 80 (ignorando las seguras por el momento), por lo que si estamos limitados a una conexión por puerto, cada servidor web estaría limitado a una sola solicitud a la vez, que no puede escalar. En cambio, todos los sistemas aceptan múltiples solicitudes al mismo puerto y el procesamiento de los datos se realiza en función de la combinación de la dirección de origen, el puerto de origen, la dirección de destino y el puerto de destino.

En la práctica, el factor limitante de cuántas conexiones puede manejar un servidor es su potencia de procesamiento. Es posible alrededor de 1k-10k solicitudes simultáneas a través de algunos servidores, y mucho mayor para los equilibradores de carga (que distribuirán las solicitudes en muchos servidores de fondo). En algún momento, sin embargo, un servidor terminará comenzando a pasar más tiempo procesando las conexiones que procesando datos para ellas y ese no es un buen estado para estar.

Además, si puede procesar las solicitudes lo suficientemente rápido, puede abrir una conexión, recibir los encabezados, procesar y enviar una respuesta, y luego cerrar todo muy rápidamente (a veces en menos de 100 ms – 0.1 s). Por lo tanto, si puede procesar más datos, más rápido, necesitará menos conexiones concurrentes activas en cualquier momento.