Comment fonctionne un serveur de gérer les demandes de service web à partir de plusieurs clients
Je viens de terminer une application Android qui utilise les services web pour se connecter à une base de données distante. Je travaillais sur localhost.
Maintenant, j'ai l'intention d'héberger mes services web sur un serveur. Disons que j'ai mon application Android installée sur n'importe quel nombre de clients différents smartphones. Chaque utilisateur de smartphone appelle le service web en même temps.
Maintenant comment le serveur de gérer ces demandes? Est-il exécuter un thread par demande? Je veux savoir sur le traitement de serveur dans le détail. Considérant, tous les téléphones utilisant le GPRS, il y aura toute sorte de retard dans une telle situation?
BTW, mon web services sont tous SAVON à base et le serveur j'ai l'intention d'utiliser plus tard sera un Serveur SQL. J'ai utilisé .NET framework pour la création de services web.
OriginalL'auteur Parth Doshi | 2011-11-26
Vous devez vous connecter pour publier un commentaire.
Son pour le concept général, pas un Android spécifique
Généralement, chaque utilisateur envoie une requête HTTP de la page. Le serveur reçoit les requêtes et les délégués aux différents travailleurs (processus ou threads).
En fonction de l'URL donnée, le serveur lit un fichier et l'envoie à l'utilisateur. Si le fichier est une dynamique de fichier comme un fichier PHP, le fichier est exécuté avant d'être envoyé à l'utilisateur.
Une fois que le fichier a été envoyé, le serveur habituellement ferme la connexion après quelques secondes.
Regarder Combien De Serveurs Web Fonctionnent
EDIT:
Pour HTTP utilise le protocole TCP qui est un protocole de connexion. Qui est, les clients à établir une connexion TCP lorsqu'elles sont en communication avec le serveur.
Plusieurs clients sont autorisés à se connecter sur le même port de destination sur la même machine de destination en même temps. Le serveur vient nous ouvre plusieurs connexions simultanées.
Apache (et la plupart des autres serveurs HTTP) ont un module multi-processus (MPM). Il est responsable de l'allocation de Apache threads/processus pour gérer les connexions. Ces processus ou threads peuvent alors s'exécuter en parallèle sur leur propre connexion, sans bloquer les uns les autres. Apache MPM a aussi tendance à garder ouvertes "de rechange" threads ou processus, même si aucune connexion n'est ouvert, ce qui contribue à accélérer les demandes ultérieures.
Remarque:
L'un des problèmes les plus courants avec le multi-threading est "race conditions"-- où vous deux demandes sont en train de faire la même chose ("racing" pour faire la même chose), si c'est une ressource unique, l'un d'entre eux va gagner. Si les deux insérer un enregistrement dans la base de données, ils ne peuvent pas à la fois le même id-- l'un d'eux va gagner. Donc vous devez être prudent lors de l'écriture de code pour réaliser d'autres demandes sont en cours, en même temps, et peut modifier votre base de données, écrire des fichiers ou de modifier des variables globales.
Sa dépend de la disponibilité des ressources et les performances du serveur.
OriginalL'auteur user370305
Le serveur sera de maintenir un pool de thread d'écoute pour les demandes entrantes. Sur réception d'une demande, le thread va traiter la demande et renvoyer la réponse. Si toutes les demandes sont reçues en même temps et ils sont de moins en moins que le nombre maximal de threads dans la piscine, ils seront tous les services en parallèle (si le traitement s'affichera sur la base du nombre de cœurs/cpu). Si il y a plus de demandes que de threads, la demande sera mis en file d'attente (en attente de connexion) jusqu'à ce qu'un thread libère ou à la demande du client.
Si vous êtes connecté à des services à partir d'un réseau mobile, il n'y a plus la latence de la connexion initiale, mais pas assez pour faire une différence.
presque tous les serveurs de mettre en œuvre la mutualisation pour les connexions.
OriginalL'auteur Chris
Votre question n'est pas vraiment lié à Android, mais mobile, développement web back-end.
Je ne sais pas comment l'utiliser .NET pour l'application de serveur de développement, mais si vous prenez l'exemple d'un Apache/PHP/MySQL, chaque demande sont à exécuter dans un thread séparé.
Il pourrait y avoir de petites délais de latence alors que la demande de joindre le serveur, mais cela ne devrait pas affecter le temps pris par votre serveur pour traiter la demande et les données.
L'une de la chose à penser est d'éviter d'envoyer des demandes multiples d'un même client. Il s'agit d'un problème de mise en œuvre : puisque vous n'avez pas les données déjà de retour, vous pensez qu'il n'y a aucune demande en attente et que vous lancez une nouvelle demande. Cela peut créer une charge inutile sur votre serveur.
Espère que ça aide !
Cela pourrait dépend beaucoup de votre application spécificité, indépendamment de ce que je vous suggère de garder la technologie que vous êtes familier avec. La teigne du web backend piles sont équivalents, mais l'expérience n'a d'importance !
merci beaucoup !! 🙂
OriginalL'auteur AsTeR