Caratteristiche di Workerman

1. Sviluppo in puro PHP

Le applicazioni sviluppate con Workerman possono funzionare in modo autonomo senza dipendere da php-fpm, apache o nginx. Questo rende lo sviluppo, il deployment e il debugging delle applicazioni molto pratici per gli sviluppatori PHP.

2. Supporto per processi PHP multipli

Per sfruttare appieno le prestazioni multiple della CPU del server, Workerman supporta di default processi e task multipli. Workerman avvia un processo principale e più processi secondari per fornire servizi; il processo principale è responsabile del monitoraggio dei processi secondari, i quali ascoltano autonomamente le connessioni di rete e gestiscono l'invio e la ricezione dei dati. Poiché il modello di processo è semplice, Workerman è più stabile ed efficiente.

3. Supporto per TCP e UDP

Workerman supporta due protocolli di trasporto, TCP e UDP; è sufficiente modificare un attributo per cambiare il protocollo di trasporto, senza modificare il codice di business.

4. Supporto per connessioni lunghe

Spesso è necessario che le applicazioni PHP mantengano una connessione lunga con il client, come nelle chat room o nei giochi. Tuttavia, i tradizionali contenitori PHP (apache, nginx, php-fpm) hanno difficoltà a farlo. Utilizzando Workerman, finché il business server non chiama attivamente l'interfaccia per chiudere la connessione, è possibile utilizzare la connessione lunga in PHP. Un singolo processo di Workerman può supportare migliaia di connessioni simultanee, mentre più processi possono supportare decine di migliaia o addirittura milioni di connessioni simultanee.

5. Supporto per vari protocolli di livello applicativo

Workerman supporta vari protocolli di livello applicativo, inclusi i protocolli personalizzati. Cambiare protocollo in Workerman è altrettanto semplice: si tratta di configurare un campo, il protocollo cambia automaticamente senza alcuna modifica al codice di business, e può anche essere possibile aprire porte per più protocolli diversi per soddisfare diverse esigenze dei client.

6. Supporto per alta concorrenza

Workerman supporta la libreria di polling degli eventi Libevent (è necessario installare l'estensione event), e usando Event, le prestazioni durante connessioni lunghe e alte concorrenze sono davvero eccezionali. Se l'estensione Event non è installata, utilizzerà comunque le chiamate di sistema Select integrate in PHP, garantendo prestazioni altrettanto robuste.

7. Supporto per riavvio del servizio senza interruzioni

Quando è necessario riavviare il servizio (ad esempio, per pubblicare una nuova versione), non vogliamo che i processi che stanno gestendo le richieste degli utenti vengano terminati immediatamente, né vogliamo che il riavvio stesso porti a fallimenti nella comunicazione del client. Workerman fornisce una funzionalità di riavvio senza interruzioni, garantendo un aggiornamento fluido del servizio senza influire sull'uso da parte dei client.

8. Supporto per il monitoraggio e il caricamento automatico dei file

Durante il processo di sviluppo, vogliamo che le modifiche al codice abbiano effetto immediato, in modo da poter vedere i risultati. Workerman offre il FileMonitor componente di monitoraggio file; non appena un file viene aggiornato, Workerman eseguirà automaticamente il reload per caricare il nuovo file e renderlo attivo.

9. Supporto per l'esecuzione dei processi secondari con utenti specificati

Poiché i processi secondari sono quelli che gestiscono effettivamente le richieste degli utenti, per ragioni di sicurezza, questi processi non dovrebbero avere privilegi troppo elevati. Pertanto, Workerman supporta la configurazione dell'utente con cui eseguire i processi secondari, rendendo il server più sicuro.

10. Supporto per la permanenza di oggetti o risorse

Durante l'esecuzione, Workerman carica e analizza un file PHP una sola volta e poi lo mantiene in memoria, evitando la creazione e distruzione ripetute di classi e funzioni, ambiente di esecuzione PHP, tabelle dei simboli, ecc. Questo è completamente diverso dal meccanismo PHP in esecuzione in un contenitore Web. In Workerman, i membri statici o le variabili globali rimangono permanenti durante il ciclo di vita di un processo, a meno che non vengano distrutti attivamente; ciò significa che risorse come oggetti o connessioni possono essere riutilizzate da tutte le richieste durante l'intero ciclo di vita del processo. Ad esempio, se si inizializza una connessione al database una sola volta in un processo, tutte le richieste successive in quel processo possono riutilizzare quella connessione al database, evitando il processo di handshake TCP triplo, la verifica dei permessi del database e il processo di handshake TCP quadruplo durante la disconnessione, migliorando notevolmente l'efficienza dell'applicazione.

11. Alte prestazioni

Poiché i file PHP vengono letti e analizzati un'unica volta dal disco e poi rimangono in memoria, la prossima volta che vengono utilizzati, verranno utilizzati direttamente gli opcode in memoria. Ciò riduce notevolmente l'IO del disco e molti dei processi dispendiosi in termini di tempo come l'inizializzazione della richiesta, la creazione dell'ambiente di esecuzione, l'analisi lessicale, l'analisi sintattica, la compilazione degli opcode e la chiusura della richiesta. Inoltre, non dipendendo da contenitori come nginx o apache, si riducono le spese di comunicazione tra nginx e PHP. La cosa più importante è che le risorse possono rimanere permanenti, evitando di dover inizializzare continuamente la connessione al database, e quindi utilizzare Workerman per sviluppare applicazioni garantisce prestazioni molto elevate.

12. Supporto per HHVM

Supporta l'esecuzione sulla macchina virtuale HHVM, che può raddoppiare le prestazioni di PHP. In particolare, per i carichi di lavoro CPU-intensivi, le prestazioni sono eccezionali. Attraverso test di stress reali, è stato dimostrato che in assenza di carico di lavoro, Workerman in esecuzione su HHVM ha mostrato un aumento della capacità di throughput di rete del 30-80% rispetto a Zend PHP5.6.

13. Supporto per distribuzioni distribuite

14. Supporto per la modalità demone

15. Supporto per l'ascolto su più porte

16. Supporto per la reindirizzazione dell'input/output standard