Necesito escribir un servidor que acepte conexiones desde varias máquinas cliente, mantenga un registro de clientes conectados y envíe datos de clientes individuales según sea necesario. A veces, todos los clientes pueden ser contactados a la vez con el mismo mensaje, otras veces, puede ser un cliente individual o un grupo de clientes.Conexiones de socket múltiple
Como necesito confirmación de que los clientes recibieron la información y no quiero construir una estructura ACK para una conexión UDP, decidí usar un método de transmisión TCP. Sin embargo, he estado luchando por comprender cómo mantener conexiones múltiples y mantenerlas inactivas.
Parece que tengo tres opciones. Use un tenedor para cada conexión entrante para crear un proceso hijo por separado, use pthread_create para crear un hilo nuevo completo para cada proceso, o use select() para esperar en todos los ID de socket abiertos para una conexión.
Recomendaciones sobre cómo atacar esto? Empecé a trabajar con pthreads, pero dado que el rendimiento probablemente no sea un problema, el procesamiento multinúcleo no es necesario y tal vez haya una manera más sencilla.
Como nota, estoy trabajando en C/C++ – BSchlinker
También debo mencionar que el número de conexiones a este sistema es estático. Esta no es una máquina pública (las conexiones no cambiarán con el tiempo, es decir, no veo problemas de rendimiento como un problema). – BSchlinker
Personalmente, multiplexaría usando select(), o preferiblemente kqueue() si se ejecuta en mac o bsd. Sin embargo, cualquiera de las tres opciones funcionaría, y las opciones pthread/fork son súper fáciles de implementar si su servidor va a tener un bajo conteo de clientes y una baja contención de clientes activos. –