Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    Chiamare web services e rpc in parallelo

    Ciao a tutti,
    ho cercato sia nel forum che in internet una soluzione precisa al problema ma invano.
    Il mio problema è il seguente: ho diversi web services da chiamare ( anche fino a 10 ) e non tutti sono SOAP, alcuni sono semplici RPC ma tutti rispondono comunque in XML.
    Quello che mi servirebbe è chiamarli in parallelo contemporaneamente ed alla fine, ottenuti i risultati da tutte le chiamate, effettuare una funzione finale che lavora appunto sui risultati ottenuti.
    Questa funzione deve attendere che tutte le chiamate siano terminate.
    In .NET riesco a fare il tutto con pochissime righe di codice grazie alle Tasks. Siccome sto migrando la web application in ambiente lamp avrei bisogno di qualcosa di simile in PHP.
    Qualche aiuto?

    Grazie.

  2. #2
    Forse è il caso di fare delle chiamate Ajax dal client. Sarebbero asincrone e avresti gli strumenti per lanciare la funzione "riepilogativa" quando tutti i web services hanno restituito il loro responso.

  3. #3
    Ma se non ricordo male con ajax non si possono lanciare richieste contemporanee verso lo stesso host, difatti se con chrome ad esempio apro 2 pagine dello stesso sito, se la prima non ha ancora finito di caricare la seconda non va. Sbaglio?

  4. #4
    Quote Originariamente inviata da ancio Visualizza il messaggio
    Ma se non ricordo male con ajax non si possono lanciare richieste contemporanee verso lo stesso host, difatti se con chrome ad esempio apro 2 pagine dello stesso sito, se la prima non ha ancora finito di caricare la seconda non va. Sbaglio?
    Sì, sbagli. Le chiamate Ajax, se asincrone, partiranno a pochi millesimi di secondo l'una dall'altra e non c'è nessuna controindicazione se sono rivolte allo stesso host. Sinceramente l'esempio di Chrome non l'ho capito...

  5. #5
    se la chiamata è server - to - server allora puoi usare una simpatica libreria di nome guzzlehttp che ti permette, tra l'altro, di effettuare chiamate in parallelo:

    http://guzzle3.readthedocs.org/batching/batching.html

    se è client - to - server (ajax), se non erro le chiamate ajax sono effettuate in sequenza... vabbeh non lo so non mi sono mai posto il problema, cmq usando jQuery risolveresti con:

    http://api.jquery.com/jQuery.when/ ( un esempio: http://stackoverflow.com/questions/1...ascript-jquery )

    vedi te
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  6. #6
    Ho cercato un po' di materiale ed ho trovato che le connessioni simultanee possibili sono 8 su ie e 6 su Firefox e chrome. Quindi diciamo che su 10 servizi da chiamare potrei comunque non avere una contemporaneità totale.
    ho anche dei dubbi a livello di prestazione, difatti si tratterebbe per ogni utente che vengano aperte altre 10 connessioni verso il server il che moltiplicato per il potenziale numero di utenti già con 10 utenti contemporanei avrei 100 connessioni al server.
    non mi sembra accettabile. Contando anche che ogni richiesta può essere abbastanza lunga alcuni servizi rispondono in 5/6 secondi o anche 10.

  7. #7
    Quote Originariamente inviata da Santino83_02 Visualizza il messaggio
    se la chiamata è server - to - server allora puoi usare una simpatica libreria di nome guzzlehttp che ti permette, tra l'altro, di effettuare chiamate in parallelo:

    http://guzzle3.readthedocs.org/batching/batching.html
    la libreria se non erro effettua chiamate http il che può andar bene per i servizi non soap ma su quelli soap perderei tutte le funzionalità di parsing del soapclient e mi toccherebbe riscrivere il codice di parsing da capo.

  8. #8
    Quote Originariamente inviata da ancio Visualizza il messaggio
    Ho cercato un po' di materiale ed ho trovato che le connessioni simultanee possibili sono 8 su ie e 6 su Firefox e chrome. Quindi diciamo che su 10 servizi da chiamare potrei comunque non avere una contemporaneità totale.
    ho anche dei dubbi a livello di prestazione, difatti si tratterebbe per ogni utente che vengano aperte altre 10 connessioni verso il server il che moltiplicato per il potenziale numero di utenti già con 10 utenti contemporanei avrei 100 connessioni al server.
    non mi sembra accettabile. Contando anche che ogni richiesta può essere abbastanza lunga alcuni servizi rispondono in 5/6 secondi o anche 10.
    Per una volta ie si comporta meglio della concorrenza...
    L'equivalente PHP dei Tasks pare sia: http://php.net/pthreads (Se ne parla qui: http://stackoverflow.com/questions/1...asynchronously )
    Ma non sono supportati nativamente, hai la possibilità di installarli sul tuo server?

  9. #9
    Comicio seriamente a pensare che non ci sia una maniera "reale" per fare quello di cui avrei bisogno.
    Ho pensato di utilizzare multi cUrl ma perderei nei servizi Soap tutti i vantaggi del SoapClient ( che non sono pochi sia a livello di costruzione della richiesta che in parsing della risposta e gestione degli errori ). Chiamare lato server con multi cUrl delle pagine php che interroghino ognuna un servizio equivale ad aprire 10 nuove connessioni verso apache per ogni utente con quello che ne comporta a livello di prestazioni. Idem con AJAX lato client. Ogni soluzione sembra avere pesanti controindicazioni.
    Le Task di .NET sono fantastiche proprio perchè vi si può inserire qualsiasi tipo di operazione e vengono eseguite in thread secondari non appartenenti a quelli del web server, quindi non intaccano le prestazioni se non quelle generali della macchina che possono comunque essere aumentate. Mi stranizza che con PHP non esista qualcosa di simile.

  10. #10
    Quote Originariamente inviata da ancio Visualizza il messaggio
    Comicio seriamente a pensare che non ci sia una maniera "reale" per fare quello di cui avrei bisogno.
    Ho pensato di utilizzare multi cUrl ma perderei nei servizi Soap tutti i vantaggi del SoapClient ( che non sono pochi sia a livello di costruzione della richiesta che in parsing della risposta e gestione degli errori ). Chiamare lato server con multi cUrl delle pagine php che interroghino ognuna un servizio equivale ad aprire 10 nuove connessioni verso apache per ogni utente con quello che ne comporta a livello di prestazioni. Idem con AJAX lato client. Ogni soluzione sembra avere pesanti controindicazioni.
    Le Task di .NET sono fantastiche proprio perchè vi si può inserire qualsiasi tipo di operazione e vengono eseguite in thread secondari non appartenenti a quelli del web server, quindi non intaccano le prestazioni se non quelle generali della macchina che possono comunque essere aumentate. Mi stranizza che con PHP non esista qualcosa di simile.
    Vedi risposta precedente.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.