2012-07-09 16 views
11

Ho visto accennato in vari punti di Internet che le web socket HTML5 non funzionano bene con PHP, che PHP per sua natura è adatto solo per l'uso con loro. D'altra parte, vedo più tutorial sull'uso di PHP con WebSockets e Ive notato qualche implementazione websocket PHP come http://code.google.com/p/phpwebsocket/Le web socket sono adatte all'uso con PHP?

Così qualcuno ha qualche informazioni definitive sull'uso WebSockets con PHP. Sono utilizzabili con PHP, quali sono i vantaggi/svantaggi del loro utilizzo con PHP rispetto a Java o Python e perché ho letto numerose persone che dicono che non funzionano bene insieme?

+2

Potresti essere interessato a leggere su NodeJS e socket.io. Dipende dal tuo progetto ma potrebbe darti quello che ti serve: [nodejs.org] (http://nodejs.org) [socket.io] (http://socket.io) – imperium2335

risposta

7

Il problema è che WebSockets sono progettati per esecuzione prolungata fili/processi che ciascun mantenere più connessioni event-driven, che PHP (ed è Apache coorte) creata attorno al paradigma procedurale breve durata singolo processo (es. max_execution_time is commonly set to 30 seconds, e la sessione è single threaded).

Ciò non vuol dire che sia impossibile scrivere un'implementazione del server WebSockets in PHP. Sono a conoscenza dell'esistenza di almeno un progetto con done exactly this (ma si noti che anche questo esempio viene eseguito dalla riga di comando, non tramite mod_php). Ma è probabile che l'implementazione di PHP di WebSockets sia incompatibile con l'installazione dell'hosting economico/condiviso in cui PHP è più comunemente usato.

Quindi, mentre è possibile farlo in PHP, si finisce per dover eseguire comunque un processo server separato (da Apache), e se si è sul tipo di hosting che consente processi separati del server, allora è più facile scrivere WebSockets codice in qualcosa che è stato progettato per la programmazione basata su eventi.

Se non hai intenzione di servire decine di migliaia di connessioni simultanee duplex, è probabile che starai meglio usando una combinazione di AJAX e SSE con il tuo back-end PHP.

+0

Che dire di php-fpm? E php7 con tecnologia JIT? Questa risposta dovrebbe essere aggiornata. – LeonanCarvalho

0

Recentemente ho provato phpwebsocket e non funziona in questo momento (php 5.4 e chrome) il codice si riferisce a una seconda chiave nell'handshake che non esiste in rev. 13 del protocollo websocket Non ho il tempo di leggere la RFC per capire qual è il problema.

È sicuro che questa soluzione è più elegante e reattiva di AJAX con polling lungo ma i websocket non sono stabili in questo momento penso che sarebbe più interessante attendere che il w3c lo annunci stabile.