2012-07-09 12 views
11

Widziałem, jak wspomniałem w różnych miejscach w Internecie, że HTML5 websockets nie działają dobrze z PHP, że PHP z natury jest odpowiedni do użycia z nimi. Z drugiej strony, widzę wiele samouczków na temat używania PHP z websocket i zauważyłem, że niektóre implementacje websocket PHP, takie jak http://code.google.com/p/phpwebsocket/Czy websockets są odpowiednie do użycia z PHP?

Tak, czy ktoś ma jakieś ostateczne informacje na temat korzystania z websockets z PHP. Czy są one użyteczne w PHP, jakie są zalety/wady ich używania z PHP w przeciwieństwie do Javy lub Pythona i dlaczego czytam wiele osób mówiących, że nie działają dobrze razem?

+2

Możesz być zainteresowany czytaniem o NodeJS i socket.io. To zależy od twojego projektu, ale może dać ci to, czego potrzebujesz: [nodejs.org] (http://nodejs.org) [socket.io] (http://socket.io) – imperium2335

Odpowiedz

7

Problem polega na tym, że WebSockets są zaprojektowane dla długich wątków/procesów, z których każdy utrzymuje wiele połączeń sterowanych zdarzeniami, podczas gdy PHP (i jego kohorty Apache) zostały zaprojektowane wokół krótkotrwałego proceduralnego paradygmatu proceduralnego (np. max_execution_time is commonly set to 30 seconds, a sesja jest pojedyncza).

Nie znaczy to, że nie można napisać implementacji serwera WebSockets w PHP. Mam świadomość, że istnieje co najmniej jeden projekt, który ma done exactly this (ale uwaga: nawet ten przykład zostanie uruchomiony z wiersza poleceń, a nie przez mod_php). Prawdopodobnie implementacja PHP w WebSockets jest niekompatybilna z konfiguracją taniego/dzielonego hostingu, w którym najczęściej używa się PHP.

Tak więc, mimo że jest to możliwe w PHP, i tak musisz uruchomić osobny proces serwera (z Apache), a jeśli jesteś w rodzaju hostingu, który pozwala na oddzielne procesy serwera, to łatwiej jest pisać WebSockets kod w coś, co jest przeznaczone do programowania sterowanego zdarzeniami.

Jeśli nie planujesz obsługiwać dziesiątek tysięcy równoległych połączeń dwustronnych, prawdopodobnie lepiej będzie użyć kombinacji AJAX i SSE z back-endem PHP.

+0

A co z php-fpm? A php7 z technologią JIT? Ta odpowiedź powinna zostać zaktualizowana. – LeonanCarvalho

0

Niedawno wypróbowałem phpwebsocket i obecnie nie działa (php 5.4 i chrome) kod odnosi się do drugiego klucza w uzgadnianiu, którego nie ma w rev. 13 protokołu websocket nie mam czasu, aby przeczytać RFC, aby zrozumieć, co się dzieje.

Jest pewne, że to rozwiązanie jest bardziej eleganckie i reaktywne niż AJAX z długim sondowaniem, ale bramki internetowe nie są stabilne w tym momencie. Myślę, że byłoby ciekawiej poczekać, aż w3c ogłosi, że jest stabilny.

Powiązane problemy