2012-08-31 17 views
15

Mam aplikację napisaną w PHP przy użyciu laravel.Aplikacja PHP + powiadomienia oparte na WebSocket przez Socket.IO

Teraz muszę dodać system powiadamiania w czasie rzeczywistym, który przesyła wiadomości z serwera -> klienta i może pobierać wiadomości wysyłane z klienta -> serwera.

Ponieważ Socket.IO jest wstecznie kompatybilny i ulega zniszczeniu, chcę go użyć do części odpytywania WebSocket/AJAX.

Problem polega na tym, że domyślnie Socket.IO działa z backendem Node.JS.

Mam uprawnienia administratora do serwera, nie ma problemu z jednoczesnym uruchomieniem obu (Apache i Node) lub dodawania niczego dodatkowego.

Problem jest, Jak wysłać wiadomość z PHP do Node + Sockets.IO?

A następnie, Jak przenieść wiadomość z Sockets.IO + Node do PHP?

Pozostawiłem węzeł Węzeł + gniazda do przeglądania, ponieważ jest to całkiem proste.

Widziałem przykłady z wykorzystaniem Express.js + CURL and/or POST requests, ale czy nie ma niższego sposobu na zrobienie tego?

Jestem świadomy DNode + PHP, ale nie mogę sobie wyobrazić, jak złożyć wszystko - Apache, PHP, Node, Socket.IO, DNode, aby działał bezproblemowo.

Zmieniłem także bibliotekę laravelową w implementację PHP WebSockets server. Problem z tą biblioteką polega jednak na tym, że wykorzystuje czyste WebSockets po stronie klienta. I nie mogłem znaleźć sposobu na zhackowanie go razem z Socket.IO client.

Odpowiedz

8

Ten samouczek na temat using PHP and Socket.IO odpowiada na główną część pytania.

socket.io to nie jedyne opcje. Spójrz na realtime web tech guide. Wygląda na to, że najlepszym obecnie rozwiązaniem opartym na PHP jest Ratchet. To musi działać jako oddzielny proces, więc nadal będziesz mieć problem z komunikacją między procesami.

Typowym problemem komunikacji między procesami jest używanie kolejek komunikatów. Problem pojawia się wtedy, gdy chcesz, aby twoja aplikacja PHP działająca na Apache była informowana o zdarzeniach z technologii internetowej w czasie rzeczywistym. Prawdopodobnie będziesz musiał to zrobić przez połączenie internetowe, nawet jeśli jest to połączenie z procesu webowego w czasie rzeczywistym do serwera apache.

Inną opcją jest odciążenie komunikacji w czasie rzeczywistym z usługą hostowaną, taką jak Pusher, dla której pracuję.

Ta ostatnia kwestia jest również istotna i ma kilka przydatnych linków: Is native PHP support for Web Sockets available?

+0

Cholera, to Ratchet! Jest właścicielem! http://socketo.me/docs/push zawiera samouczek krok po kroku, jak wypchnąć z aplikacji, która nie jest zapinana. Zaimplementowałem funkcjonalność w kilka minut. +10 dla Ratchet. – jolt

+0

@leggetter Wow, Pusher wygląda dla mnie naprawdę nierozważnie. Dziękuję za udostępnienie tego. Myślę, że spróbuję. Lepiej to zmarnujcie mój czas na wdrożenie własnego systemu. –

+0

Tak, Pusher.com wydaje się być rozsądną drogą do zrobienia! –

1

Nie ma łatwego sposobu komunikacji między węzłem a apache/php. Będziesz więc musiał ponownie napisać całą swoją funkcjonalność w węźle (łącząc się z bazami danych MySQL i innymi) lub stworzyć interfejs API do wywoływania z Węzła i przekazywać do gniazd.

Jednak można użyć wtyczki jquery, takiej jak Jquery graceful websockets i this php class, aby uzyskać własną funkcjonalność websockets przy pomocy jquery i php, zamiast używać sockets.io.

Powiązane problemy