¿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.

¿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.

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 !

  • Dynamic "apple-touch-icon" en dispositivos Android?
  • Envío de un archivo pdf al cliente desde el servidor a través del servicio web
  • ¿Cómo puedo determinar si una aplicación de Android se ha creado con una vista web?
  • Android addJavascriptInterface equivalente en iOS
  • Excepción de puntero nulo que hace difícil pasar un arreglo usando ksoap
  • Imágenes borrosas en el navegador Android de stock
  • ¿El error de AdView causó que todas las vistas de la Web dejen de cargarse cuando cambia la orientación y se están ejecutando múltiples subprocesos?
  • ¿Cómo enviar notificaciones a la aplicación de Android desde el servidor de Java mediante GCM?
  • ¿Cómo se puede pasar JSON a AngularJS en la vista web de Android?
  • WebView no se dibuja, WARN / webcore (5336): No se puede obtener la viewWidth después del primer diseño
  • API de Android 23. WebView cómo ignorar errores de JavaScript
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.