Back to top

Autore Topic: Eseguire una funzione in background  (Letto 5044 volte)

Offline pataciolla

  • Nuovo arrivato
  • *
  • Post: 38
    • Mostra profilo
Eseguire una funzione in background
« il: 15 Nov 2013, 10:49:23 »
Ciao a tutti,


Come posso eseguire un metodo di una classe o comunque del codice php in background... come processo separato mentre "l'utente" va avanti a fare quello che gli pare?


Non riesco a trovare nulla che mi possa aiutare con joomla..


Mi accontento di suggerimenti per cominciare a trovare una soluzione.  ;D


Grazie

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Eseguire una funzione in background
« Risposta #1 il: 15 Nov 2013, 11:37:16 »
ciao, non è questione di joomla, ma di php.

la risposta base è non puoi. la process control library non è compilata in nessun php per hosting. se il server è tuo è altro discorso, in tal caso ti compili php con la libreria  e puoi fare un fork del processo chiamato.

per il resto potresti richiamare uno script che non genera output, ma poi come controlli il processo?

magari se spieghi ciò che ti serve e per farne che cosa...

ciao,
marco

mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline pataciolla

  • Nuovo arrivato
  • *
  • Post: 38
    • Mostra profilo
Re:Eseguire una funzione in background
« Risposta #2 il: 15 Nov 2013, 20:55:49 »
Riassumendo ... dopo lunghe tribolazioni sono riuscita a collegare joomla con un'altra piattaforma via webservice ma siccome nelle funzioni di gestione delle chiamate soap si muovono anche files tra un sistema e l'altro via webservice e ci mette un po' dovrei eseguirle in background in modo che nel frattempo il server soap risponde al client senza farlo "aspettare"


Non so se sono stata chiara  ;D

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Eseguire una funzione in background
« Risposta #3 il: 15 Nov 2013, 21:25:20 »
magari non ho capito io...

ma tu hai un webservice che impiega tempo a trasferire i suoi dati? quindi il client resta collegato al server perché sta trasmettendo i dati al server?

se la risposta è sì, stai guardando il problema dalla parte sbagliata! è il client che deve lavorare in background.

ciao,
marco

mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline pataciolla

  • Nuovo arrivato
  • *
  • Post: 38
    • Mostra profilo
Re:Eseguire una funzione in background
« Risposta #4 il: 15 Nov 2013, 21:37:43 »
In effetti non era molto chiaro. .. sorry
Mi arriva una richiesta soap via web service al mio soap server.
Nella richiesta ci sono vari dati che processo.
Tra questi ci sono degli id associati a dei files ... io invio una richiesta soap (come client) all'altro sistema inviando gli id e ricevo la risposta con il file.
Lo salvo nella posizione corretta e aggiorno il database e finito tutto il mio soap server finisce di elaborare la richiesta e invia la risposta.

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Eseguire una funzione in background
« Risposta #5 il: 15 Nov 2013, 21:49:43 »
allora: abbiamo un client che invia una richiesta al server s1, questi invia una richiesta al server joomla s2.
s1 ovviamente attende che s2 risponda e poi trasmette i dati al client.
lascia stare che cosa è trasmesso.

è così?
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline pataciolla

  • Nuovo arrivato
  • *
  • Post: 38
    • Mostra profilo
Re:Eseguire una funzione in background
« Risposta #6 il: 16 Nov 2013, 01:55:06 »
Client s1 -> richiesta-> server joomla s2 (mio sito)
[Client joomla s2 -> richiesta e ricezione risposta -> server s1]
Server joomla s2 -> risposta-> client s1

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Eseguire una funzione in background
« Risposta #7 il: 16 Nov 2013, 08:54:51 »
nebbia sempre più fitta: ma 'client s1' e 'server s1' sono la stessa cosa?
comunque lasciamo stare, tanto non interessa.

riassumiamo così:
una applicazione client (C) interroga via web service un server (S).

indipendentemente dal tempo che S impiega a rispondere, S non può chiudere la comunicazione con C, pena l'impossibilità di riaprirla. se poi C è un client desktop di sicuro qualsisi tentativo di connessione inversa sarà stroncata dal firewall.

vedo due soluzioni:

1. tre web service (errato)
C richiede un'elaborazione ad S che restituisce un token. C, ciclicamente interroga S per sapere se l'operazione associata al token è terminata. C recupera i dati da S.

2. richiesta asincrona (corretto)
C avvia una richiesta asincrona (non si parla di background ma di processi asincroni) a S e resta collegato finché non riceve la risposta.

ciao,
marco

mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline pataciolla

  • Nuovo arrivato
  • *
  • Post: 38
    • Mostra profilo
Re:Eseguire una funzione in background
« Risposta #8 il: 18 Nov 2013, 17:22:15 »
client s1 e server s1 ... è sempre il mio sito ... è un web service bidirezionale. No comment... non l'ho progettato io il ws!  ;D






Comunque, Questa richiesta asincrona quindi come funziona? hai un esempio che possa essermi utile?

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Eseguire una funzione in background
« Risposta #9 il: 18 Nov 2013, 21:27:04 »
io storco sempre il naso quando si parla di web service bidirezionale...
(per sua natura non può esservi comunicazione bidirezionale dato il protocollo impiegato)

scrivi un codice da richiamare, come iframe/img/o altro, all'interno del codice della pagina richiamata dall'utente. forse si può fare meglio ma bisogna provare:

Codice: [Seleziona]
<?php
ob_end_clean
();
header("Connection: close");
ob_start();
echo 
'eventuale output per il client';
$size ob_get_length();
header("Content-Length: $size");
ob_end_flush(); 
flush(); 

/***********************/
/***********************/

// qui prosegue il processo di interrogazione del WS remoto.
// metti un flag da qualche parte (sessione/DB) a lavoro finito

?>


qui inserisci il codice di lettura del WS. la pagina terminerà subito, ma il codice continuerà l'esecuzione. salva i risultati e settati un flag da qualche parte.


quando l'utente naviga controlla il flag di cui sopra e, nel caso, avvisalo che il lavoro è pronto.

ciao,
marco
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline pataciolla

  • Nuovo arrivato
  • *
  • Post: 38
    • Mostra profilo
Re:Eseguire una funzione in background
« Risposta #10 il: 18 Nov 2013, 22:19:57 »
Anche io storgo il naso... ma mi è imposto.

Comunque il tutto è fatto per passare dati da un sistema all'altro e salvarli nel database perciò non c'è fisicamente un utente e un output di alcun genere.

Cambia qualcosa?

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Eseguire una funzione in background
« Risposta #11 il: 19 Nov 2013, 07:45:19 »
Anche io storgo il naso... ma mi è imposto.
i WS sono la modalità corretta per la comunicazione server 2 server. WS bidirezionale è un ossimoro, anche se usato in contrapposizione a WS message.


Comunque il tutto è fatto per passare dati da un sistema all'altro e salvarli nel database perciò non c'è fisicamente un utente e un output di alcun genere.
se non c'è un utente che ti interessa quanto tempo impiega? cambia tutto, nel senso che il problema prospettato non esiste.

come processo separato mentre "l'utente" va avanti a fare quello che gli pare?
deciditi: delle due l'una! comunque ora sai come implementare la soluzione.

ciao,
marco
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

 



Web Design Bolzano Kreatif