2013-07-05 2 views
11

Ho sviluppato un'estensione client PHP5 per un'applicazione server che ho scritto e finora funziona abbastanza bene, ma non supporta ancora le connessioni persistenti. Poiché questo è qualcosa che voglio implementare prima di rilasciare la prima versione stabile, cercavo la documentazione sulla persistenza e ho trovato le routine di allocazione persistenti (pemalloc, pecalloc, ecc.). Quello che non riesco a capire è come recuperare un oggetto persistente assegnati su nuove richieste, voglio dire, diciamo che l'id persistente di un collegamento è:C Persistenza dell'oggetto estensione PHP

<hostname>:<port>:<timeout> 

Come posso salvare (o controllare se era già creato) l'oggetto di connessione (che è una struttura C, non uno zval o qualcosa strettamente correlato al PHP)? Come posso recuperarlo in seguito dato il suo id?

PS: Conosco i flussi persistenti di PHP (ho studiato i sorgenti C pfsockopen), ma uso una libreria client C in modo da non poter accedere direttamente al socket o modificare la libreria client C per utilizzare i flussi di php di semplici prese.

Grazie.

+0

Le connessioni persistenti sono considerati, almeno problematico per un design web server senza stato . Perché vuoi implementarlo? Vorrei provare a creare un pool di connessioni, se possibile, e provare a reinizializzare e riutilizzare quelli esistenti – hek2mgl

+0

sì, questa è un'ottima idea, ma avrei comunque bisogno di persistenza, quindi la domanda rimane la stessa :) –

+0

Interessante problema, comunque . :) Temo di non poterti aiutare di più con questo dato che sembra che tu sappia già molto di più su questo come me. Ma ho aggiunto una fav e sono curioso di sapere come sarà la risposta. – hek2mgl

risposta

4

trovato la soluzione, sembra che ci sia un "persistent_list" oggetto hash, quindi sono in grado di fare:

zend_hash_find(&EG(persistent_list), ... 

per trovare i dati persistenti (allocd con pemalloc ovviamente), e

zend_hash_update(&EG(persistent_list), ... 

Per salvare nuove istanze.

(Ho trovato questo nel codice sorgente estensione php PostgreSQL.)

http://devzone.zend.com/446/extension-writing-part-iii-resources/#Heading8

Chiunque sia interessato nel mio approccio, è qui https://github.com/evilsocket/phpgibson