¿Cómo maneja un servidor las solicitudes de servicio web de varios clientes?
Acabo de completar una aplicación de Android que utiliza servicios web para conectarse a una base de datos remota. Yo estaba trabajando en localhost.
Ahora, planeo alojar mis servicios web en un servidor. Digamos que mi aplicación de Android está instalada en cualquier número de teléfonos inteligentes de clientes diferentes. Cada usuario de smartphone llama al servicio web al mismo tiempo.
- Notificación de empuje en Web móvil
- En la vista Web de Android, ¿puedo modificar el DOM de una página web?
- Soap 1.2 android Proporcione una acción de jabón válida
- ¿Cuál es la mejor manera de raspar este código HTML para una aplicación para Android?
- Comprobar si los datos de campo han cambiado en lugar de cualquier campo en los datos secundarios
¿Ahora cómo el servidor maneja estas peticiones? ¿Ejecuta un subproceso por solicitud? Quiero saber sobre el procesamiento del servidor en detalle. Teniendo en cuenta, todos los teléfonos utilizan GPRS, habrá algún tipo de retraso en tal situación?
BTW, mis servicios web están todos basados en SOAP y el servidor que planeo usar más adelante será un servidor SQL. He utilizado .NET framework para crear servicios web.
- Eliminar márgenes en webView
- ¿Cómo mostrar html / páginas web externas dentro de la aplicación android?
- API de Android 23. WebView cómo ignorar errores de JavaScript
- WebView deshacerse de doble toque zoom.
- ¿Cómo seleccionar y copiar texto en una vista que no está asociada a una actividad?
- WebView de Android - Dithering / Cambios al tacto
- ¿Cómo capturar una vista web a bitmap en Android?
- Android 4.1 webview javascript no funciona.
Su para el concepto general, no un específico de Android
Normalmente, cada uno de los usuarios envía una solicitud HTTP para la página. El servidor recibe las solicitudes y las delega a diferentes trabajadores (procesos o subprocesos).
Dependiendo de la URL dada, el servidor lee un archivo y lo devuelve al usuario. Si el archivo es un archivo dinámico, como un archivo PHP, el archivo se ejecuta antes de enviarlo al usuario.
Una vez que el archivo solicitado ha sido devuelto, el servidor normalmente cierra la conexión después de unos segundos.
Mira cómo funcionan los servidores web
EDITAR:
Para HTTP utiliza TCP que es un protocolo basado en conexión. Es decir, los clientes establecen una conexión TCP mientras se están comunicando con el servidor.
A varios clientes se les permite conectarse al mismo puerto de destino en la misma máquina de destino al mismo tiempo. El servidor sólo abre múltiples conexiones simultáneas.
Apache (y la mayoría de los demás servidores HTTP) tienen un módulo multiprocesamiento (MPM). Este es el responsable de asignar los procesos / threads de Apache para manejar las conexiones. Estos procesos o subprocesos pueden ejecutarse en paralelo en su propia conexión, sin bloquearse entre sí. El MPM de Apache también tiende a mantener los hilos o procesos de "repuesto" abiertos incluso cuando no hay conexiones abiertas, lo que ayuda a acelerar las solicitudes posteriores.
Nota:
Uno de los problemas más comunes con multi-threading es "condiciones de carrera" – donde dos peticiones están haciendo lo mismo ("carreras" para hacer lo mismo), si es un solo recurso, uno de ellos va a ganar. Si ambos insertan un registro en la base de datos, no pueden obtener el mismo id, uno de ellos ganará. Por lo tanto, debe tener cuidado al escribir código para darse cuenta de que otras solicitudes están ocurriendo al mismo tiempo y puede modificar su base de datos, escribir archivos o cambiar globales.
El servidor mantendrá un grupo de subprocesos escuchando las solicitudes entrantes. Al recibir una solicitud, el hilo procesará la solicitud y devolverá la respuesta. Si todas las solicitudes se reciben al mismo tiempo y son menores que el número máximo de subprocesos en el grupo, todas serán servicios en paralelo (aunque el procesamiento real se intercalará en función del número de núcleos / cpus). Si hay más peticiones que subprocesos, la solicitud se pondrá en cola (esperando una conexión) hasta que se libere un hilo o la solicitud del cliente expire.
Si se está conectando al servicio desde una red móvil, hay una latencia mayor en la conexión inicial pero no lo suficiente como para marcar la diferencia.
Su pregunta no está realmente relacionada con Android, sino con el desarrollo móvil con backend web.
No sé cómo utilizar .NET para el desarrollo de aplicaciones de servidor, pero si tomamos el ejemplo de un Apache / PHP / MySQL, cada solicitud se ejecuta en un hilo separado.
Puede haber pequeños retrasos de latencia mientras la solicitud llega al servidor, pero esto no debería afectar el tiempo que su servidor tarda en procesar la solicitud y los datos.
Una de las cosas a pensar es evitar el envío de múltiples solicitudes de un mismo cliente. Este es un problema de implementación común: ya que no tiene datos ya devueltos, cree que no hay solicitud pendiente y que inicia una nueva solicitud. Esto básicamente puede crear carga innecesaria en su servidor.
Espero que ayude !