2011-12-18 17 views
6

Con nodejs, è molto facile creare un server TCP non bloccante. Esempio da nodejs.org:Come implementare un'applicazione server socket asincrono ad alte prestazioni in PHP?

var net = require('net'); 
var server = net.createServer(function (socket) { 
    socket.write("Echo server\r\n"); 
    socket.pipe(socket); 
}); 
server.listen(1337, "127.0.0.1") 

nodejs gestisce la select() -/poll() -/epoll() roba per te, le routine di socket e il ciclo principale sono implementate in C, quindi è molto veloce e efficiente.

nodejs è grande, ma mi piacerebbe implementare un server socket TCP ad alte prestazioni in PHP, perché io sono un ragazzo PHP :)

Quindi, una cosa che già provato è quello di implementare le routine di socket in PHP, con socket_create_listen, socket_accept, socket_select ecc. e il ciclo principale in PHP. Funziona molto bene, ma non penso che sia molto efficiente, perché devo usare socket_select che chiama internamente la funzione C select, ma epoll sarebbe meglio penso (sto usando Linux), ma epoll non è disponibile come funzione PHP. (phpsocketdaemon e phpmio sono 2 progetti che ho trovato che implementano le routine socket per voi).

Sarebbe possibile farlo in modo nodojs? Sto pensando a un modulo PHP che implementa le routine loop e socket in C e chiama le funzioni di callback PHP per gli eventi (onread, onerror ..). O non ne vale la pena?

+2

/server socket TCP ad alte prestazioni in PHP/sembra un ossimoro se mai ne ho visto uno. –

+2

Come molti fan di PHP come me, non è stato progettato per questo tipo di utilizzo. Potresti essere in grado di implementare un server al suo interno, ma direi che farlo in maniera efficiente sarebbe una vera impresa. A meno che PHP non subisca alcune modifiche architettoniche importanti per consentire questo tipo di utilizzo, consiglierei di utilizzare qualcosa di più adatto all'attività. – GordonM

risposta

2

Penso che questo sia un tipico caso di "Se tutto quello che hai è un martello, tutto sembra un chiodo".

Come hai già capito, php non è lo strumento giusto per il lavoro. Probabilmente puoi trovare il modo di farlo in ogni caso, ma molto probabilmente sarà disordinato.

Quindi utilizzare lo strumento giusto per il lavoro. Non useresti un martello per infilare una vite nel muro, vero?

+1

Più come non si sarebbe rodeo con un Humvee invece di un cavallo. –

+2

Sono d'accordo che PHP non è lo strumento migliore per questo. Ma gli sviluppatori si trovano spesso di fronte a situazioni in cui non hanno alcun controllo sul server su cui viene eseguito il codice, quindi l'installazione di nodejs o un'altra alternativa potrebbe non essere una possibilità. Ne faccio molta esperienza nel mio lavoro quotidiano per un'agenzia in cui scriviamo il codice e lo distribuiamo ai clienti che lo distribuiscono nei loro ambienti e tutto ciò che sappiamo è che il nostro codice deve essere eseguito su uno stack PHP standard. E a volte non abbiamo nemmeno accesso a phpinfo(). Penso che sia importante rimanere obiettivi e trovare una soluzione al problema di fronte a voi. – dnshio

Problemi correlati