sql >> Databasteknik >  >> RDS >> Sqlserver

Hur hanterar en server webbtjänstförfrågningar från flera klienter

Det är för det allmänna konceptet, inte ett Android-specifikt

Vanligtvis skickar var och en av användarna en HTTP-förfrågan för sidan. Servern tar emot förfrågningarna och delegerar dem till olika arbetare (processer eller trådar).

Beroende på vilken URL som ges läser servern en fil och skickar tillbaka den till användaren. Om filen är en dynamisk fil, till exempel en PHP-fil, körs filen innan den skickas tillbaka till användaren.

När den begärda filen har skickats tillbaka stänger servern vanligtvis anslutningen efter några sekunder.

Titta på Hur webbservrar fungerar

EDIT:

För HTTP använder TCP som är ett anslutningsbaserat protokoll. Det vill säga, klienter upprättar en TCP-anslutning medan de kommunicerar med servern.

Flera klienter får ansluta till samma destinationsport på samma destinationsdator samtidigt. Servern öppnar bara flera samtidiga anslutningar.

Apache (och de flesta andra HTTP-servrar) har en multi-processing module (MPM). Denna är ansvarig för att allokera Apache-trådar/processer för att hantera anslutningar. Dessa processer eller trådar kan sedan köras parallellt på sin egen anslutning, utan att blockera varandra. Apaches MPM tenderar också att hålla öppna "reserv"-trådar eller processer även när inga anslutningar är öppna, vilket hjälper till att påskynda efterföljande förfrågningar.

Obs!

Ett av de vanligaste problemen med multi-threading är "race conditions"-- där ni två förfrågningar gör samma sak ("racer" för att göra samma sak), om det är en enskild resurs kommer en av dem att vinna. Om de båda infogar en post i databasen kan de inte båda få samma id - en av dem vinner. Så du måste vara försiktig när du skriver kod för att inse att andra förfrågningar pågår samtidigt och kan ändra din databas, skriva filer eller ändra globaler.



  1. Hur man skriver MySQL-fråga där A innehåller (a eller b)

  2. Ta bort alla dubbletter av rader utom en i MySQL?

  3. Hur man får uppgifter om aktuell månad i MySQL

  4. mySQL returnerar alla rader när field=0