Desidero programmare una WebChat HTTP utilizzando richieste HTTP a lungo termine (Comet), ajax e websocket (a seconda del browser utilizzato). Userdatabase è in mysql. La chat è scritta in PHP tranne forse lo stesso flusso di chat che potrebbe anche essere scritto in javascript (node.js):PHP Socket Server vs node.js: Web Chat
Non voglio avviare un processo php per utente in quanto non c'è un buon modo per inviare la chat messaggi tra questi php childs. Quindi ho pensato di scrivere un proprio server socket in PHP o node.js che dovrebbe essere in grado di gestire più di 1000 connessioni (utenti di chat). Come sviluppatore puramente web (php) non ho molta dimestichezza con i socket perché di solito il web server si preoccupa delle connessioni. I messaggi di chat non verranno salvati su disco né in mysql ma nella RAM come array o oggetto per la migliore velocità.
Per quanto ne so non c'è modo di gestire più connessioni contemporaneamente in un singolo processo php (socket server), tuttavia è possibile accettare una grande quantità di connessioni socket ed elaborarle in un ciclo continuo (leggi e scrivi; messaggio in entrata -> scrivi su tutte le connessioni socket). Il problema è che probabilmente ci sarà un ritardo di circa 1000 utenti e le operazioni di mysql potrebbero rallentare il tutto, il che influenzerà quindi tutti gli utenti.
La mia domanda è: Can node.js può gestire un server socket con prestazioni migliori? Node.js è basato su eventi ma non sono sicuro che possa elaborare più eventi contemporaneamente (non sarebbe necessario il multi-threading?) O se c'è solo una coda di eventi. Con una coda di eventi sarebbe proprio come php: processare l'utente dopo l'utente.
Potrei anche generare un processo php per chat room (molto meno utenti) ma, a parte questo, ci sono i server IRC a singolo canale che sono anche in grado di gestire migliaia di utenti. (scritto in C++ o qualsiasi altra cosa) quindi forse è anche possibile in PHP.
Preferirei PHP su Node.js perché il progetto sarebbe php-only e non una combinazione di linguaggi di programmazione. Tuttavia, se il nodo può elaborare simultaneamente le connessioni, probabilmente lo sceglierei.
Grazie per il codice. Ho scritto più o meno lo stesso la scorsa settimana in PHP (anche il nome! == '' part è identico), quindi ora controllerò se è in PHP veloce come in node.js quindi non ho bisogno di bug con due lingue sebbene node.js sia bello e facile dato che lo ho usato per lo scripting lato client da anni (jquery, ecc.). – Eliasdx
@Eliasdx fai ogni benchmark node.js vs php? Sono curioso di sapere quali potrebbero essere i risultati. – William
@Eliasdx Qualche notizia su questo? Sto cercando di creare una chat me stesso e molto interessato a conoscere le tue scoperte. Sono personalmente più interessato a PHP. –