Cosa succede se più utenti inviano richieste HTTP al server contemporaneamente? [chiuso]

-4

Quindi, fondamentalmente, è un server web che ospita un progetto php. Il progetto accetta alcuni input dagli utenti e li invia al server tramite ajax per la convalida ogni volta che si fa clic sul pulsante check . Quindi il risultato sta tornando al client tramite json .

  • Che succede se più utenti inviano richieste al server contemporaneamente?
  • È importante per impedirlo? (Fai in modo che gli utenti inseriscano tutti gli input prima di inviare le richieste)
  • Come posso sapere se il server può gestire tali richieste in base agli utenti concorrenti?

  • Che tipo di test è la riduzione di quelle richieste http?

posta csandreas1 11.03.2018 - 12:41
fonte

1 risposta

3

What happens if multiple users send requests to the server concurrently?

Dipende da ciò che le richieste fanno . Se sono solo letti, non succede nulla. Se sono, ad esempio, contatori incrementali o variabili, allora Alice potrebbe inviare "SET x = 15" mentre Bob invia "SET x = 42" e Alice potrebbe pensare x è impostato su 15 mentre in realtà è impostato su 42. In scenari complessi in cui i dati vengono poi riutilizzati per i calcoli e l'errore potrebbe accelerare rapidamente, questo è molto cattivo e lo si evita con diverse cosiddette strategie di blocco .

Is that important to prevent that? (Make the users fill in all the inputs before sending the requests)

Ciò è sicuramente vantaggioso: assicurati che il minor numero possibile di dati nel minor numero possibile di chiamate sia soggetto a rallentamenti della rete. Quindi, fai anche tutti i controlli che puoi sul lato client. Ma mantieni il controllo anche sul lato server, poiché i client non devono mai essere considerati attendibili.

How can i know if the server can handle those requests based on the concurrent users?

Test. Usi strumenti come ab o link di Apache o Casper-Load o altro.

What type of testing is the reduction of those http requests?

Suppongo che potresti chiamarlo efficienza , ma è una metrica e non un test, e tuttavia devi anche ricordare che stai cercando un trade-off; è necessario bilanciare lo sforzo di sviluppo, la manutenibilità, l'espandibilità, le prestazioni e l'integrità dei dati. Non esiste sicuramente una soluzione valida per tutti, devi verificare quali sono i tuoi requisiti di progettazione.

Aggiornamento basato sui commenti

Actually, my project accepts inputs from the users and sends them to PHP for validation

Allora forse la maggior parte dei problemi scompare. Se la "validazione" è completamente definita dalla richiesta dell'utente e tutti gli utenti hanno un singolo accesso ciascuno, non accadrà mai che la richiesta di un utente può interferire logicamente con quella di un altro.

Potrebbero esserci conflitti di risorse (ad esempio, una convalida impiega 2 secondi di CPU al 100%, quindi non si desidera più di una richiesta ogni 2 secondi, o il server resterebbe indietro). Puoi rendere questo un problema di UX creando un "ticket service" con il quale "prenota" rapidamente un ticket e il server prenota la tua validazione per, diciamo, da 60 secondi a partire da ora. Il codice cliente è quindi costretto ad attendere (visualizzando un conto alla rovescia) e inviare la richiesta solo un minuto dopo.

Altrimenti, non hai bisogno di "difese" speciali - i thread PHP risponderanno ognuno al proprio richiedente, il protocollo HTTP si prenderà cura di questo.

How could i prevent PHP from sending a response if a validation is wrong?

Non devi . invia sempre una risposta, devi solo dire "OK" o "Sbagliato". Se non si invia la risposta, il client rimane sospeso e l'utente insoddisfatto. Se non è possibile eseguire la convalida, si invia un codice di errore HTTP che indica perché è così (40X per errore utente, 50X per errori server).

    
risposta data 11.03.2018 - 15:34
fonte

Leggi altre domande sui tag