View Full Version : Funzione socket_accept php
assiro80
04-10-2016, 08:11
Salve a tutti, avrei un quesito per il quale non sono riuscito a trovare risposte in rete.....
Mi sto avvicinando al mondo della programmazione php, piu precisamente nella comunicazione tra socket. La mia domanda può essere divisa in due:
-Quando sono presenti richieste di connessione in lista sul socket (TCP), nel momento che eseguo socket_accept(.....) quanto impiega (in caso di successo) a stabilirsi la connessione? è immediata? è gia stato eseguito in precedenza alla prima richiesta del client il 3 handshake e l'accept convalida solo l'operazione?
-E' possibile eseguire dei fork() prima dell'accept in modo di avere più processi figli contenenti socket_accept (sullo stesso descrittore) e suddividere così in caso di numerose richieste il lavoro ed evito di avere connessioni rifiutate o creo errori in quanto ho la stessa funzione ripetuta che si contende la stessa risorsa?
Grazie
ciao,
non sono sicuro di aver compreso bene le tue domande e cosa devi fare.
in ogni caso le performance dipendono dal processore/ram e dalla rete.
prova ad usare jmeter per fare dei test di carico.
per il fork, dai un occhio quà: http://www.hackingwithphp.com/16/1/3/getting-into-multiprocessing
attenzione che php non nasce come multithread e se con php7 o hhvm migliora non è la tecnologia giusta per queste cose (in linea di massima, dipende cosa devi fare ovviamente)
ciao
ps. carina anche questa, un po' come approccia nodejs https://www.mullie.eu/parallel-processing-multi-tasking-php/
ma nel caso tanto vale usare node.
assiro80
04-10-2016, 13:33
Grazie mille della risposta....... Si, forse ho inserito molte richieste alla rinfusa..... quello che più mi premeva era sapere se la funzione socket_accept() instaura immediatamente (pochi microsecondi)la connessione con il client o può avere tempi di attesa lunghi(millisecondi o più )..... ovvero se nel momento della chiamata della funzione in questione questa deve trasmettere e ricevere dati dal client per confermare la connessione o questo è già stato fatto prima di essere messo in coda da socket_listen() e quindi la funzione socket_accept è praticamente immediata??
Spero di essere stato un po' più chiaro.....:)
dovrebbe partire quando il client la ingaggia + il tempo di latenza del tuo server (velocità processore + carico di lavoro).
socket listen lo mette in attessa e accept accetta...
quindi si, può anche avere tempi lunghi. dipende da come l'hai scritta.
valuta un aiuto con dei task
assiro80
04-10-2016, 16:28
Purtroppo no ho nessun modo di valutare su server in quanto sto affrontando l'argomento solo in maniera teorica e spesso riscontro dubbi per i quali non riesco a trovare in rete e sui libri risposte esaustive. :muro:
è che sei rimasto molto nel teorico...
poi nel caso pratico l'unica è provare se si parla di test, o avere un quadro più ampio per fare valutazioni concrete.
se vuoi un maggior numero di richieste al secondo (parlando di performance pure e non calate sull'esigenza) valuta un linguaggio compilato tipo golang o java o se vuoi lo scripting node (che sia per l'asincrono sia per le performance pure guadagna).
oppure se sei su php e puoi usare hhvm scrivi in hack e valuta il multithrad o dei task appunto.
ma stiamo parlando molto genericamente ;)
ps. su una cosa simile peraltro con node ho spesso errori su un batch che gira, la cui gestione in asincrono è più difficoltosa, tienine conto.
(storicizzo dei json pesantucci, per farlo in breve tempo ne uso 200 in concorrenza ma ho circa un 1000 scarti da rigirare, su php o java non succede nel mio caso, non ho tempo di gestirlo e forse le librerie che uso sono ancora immature).
assiro80
04-10-2016, 18:21
Sei stato molto gentile.....grazie!!!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.