Czy można używać Sockets.io po stronie klienta i komunikować się z aplikacją opartą na PHP na serwerze? Czy PHP obsługuje w ogóle taki sposób pisania kodu „długotrwałe połączenie”?
Cały przykładowy kod, który znalazłem dla socket.io, wydaje się dotyczyć node.js po stronie serwera, więc nie ma tam żadnej pomocy.
Odpowiedzi:
Odpowiedź na to pytanie może być trochę za późno, ale oto co znalazłem.
Nie chcę dyskutować o tym, że węzły robią to lepiej niż php, czy nie, nie o to chodzi.
Rozwiązanie jest takie: nie znalazłem żadnej implementacji socket.io dla PHP.
Ale jest kilka sposobów implementacji WebSockets . Istnieje ta wtyczka jQuery, która umożliwia korzystanie z Websockets, jednocześnie łagodnie degradując dla nieobsługujących przeglądarek. Po stronie PHP istnieje klasa, która wydaje się być najczęściej używana dla serwerów PHP WS.
źródło
Jeśli chcesz używać socket.io razem z php, to może być twoja odpowiedź!
witryna projektu:
elephant.io
są też na githubie:
https://github.com/wisembly/elephant.io
Elephant.io dostarcza klienta socket.io w pełni napisanego w PHP, który powinien być używany w całym projekcie.
Jest to lekka i łatwa w użyciu biblioteka, której celem jest wprowadzenie funkcjonalności w czasie rzeczywistym do aplikacji PHP poprzez socket.io i websockets w celu wykonania działań, których nie można wykonać w pełnym javascript.
przykład ze strony projektu (komunikacja z serwerem websocket przez php)
serwer php
serwer z gniazdem io
źródło
AKTUALIZACJA: Sierpień 2014 Obecna witryna socket.io v1.0 ma przykład PHP: - https://github.com/rase-/socket.io-php-emitter
źródło
Jeśli naprawdę chcesz używać PHP jako zaplecza dla socket.io, oto co znalazłem. Alternatywa dla dwóch serwerów php socket.io po stronie serwera.
https://github.com/walkor/phpsocket.io
https://github.com/RickySu/phpsocket.io
Przykładowe kody dla pierwszego repozytorium takiego jak to.
źródło
Do „długotrwałego połączenia”, o którym wspomniałeś, możesz użyć Ratchet for PHP. Jest to biblioteka zbudowana w oparciu o funkcje Stream Socket, które PHP obsługuje od PHP 5.
Po stronie klienta musisz użyć protokołu WebSocket obsługiwanego przez HTML5 zamiast Socket.io (ponieważ wiesz, socket.io działa tylko z node.js).
Jeśli nadal chcesz używać Socket.io, możesz spróbować w ten sposób: - znajdź i pobierz socket.io.js dla klienta do użytku - pracuj z Ratchet, aby zasymulować sposób, w jaki socket.io robi na serwerze
Mam nadzieję że to pomoże!
źródło
Erm, dlaczego miałbyś chcieć? Pozostaw PHP na zapleczu i NodeJS / Sockets, aby robić swoje nieblokujące rzeczy.
Oto coś, od czego możesz zacząć: http://groups.google.com/group/socket_io/browse_thread/thread/74a76896d2b72ccc
Osobiście pracuję ekspresowo z punktem końcowym, który nasłuchuje bezpośrednio interakcji z PHP.
Na przykład, jeśli wysłałem użytkownikowi wiadomość e-mail, chcę, aby socket.io wyświetlał powiadomienie w czasie rzeczywistym dla użytkownika.
Chcesz interakcji z socket.io do php, możesz po prostu zrobić coś takiego:
Poważnie, PHP jest świetne do robienia rzeczy po stronie serwera i niech będzie z połączeniami, dla których nie ma teraz miejsca w tej domenie. Po co robić długie odpytywanie, skoro masz gniazda sieciowe lub flashsockets.
źródło
Znam walczącego człowieka! Ale ostatnio prawie pracowałem z Workermanem. Jeśli nie natknąłeś się na ten framework php, lepiej to sprawdź!
Cóż, Workerman jest asynchronicznym, sterowanym zdarzeniami frameworkiem PHP do łatwego tworzenia szybkich, skalowalnych aplikacji sieciowych. (Właśnie skopiowałem i wkleiłem to z ich strony internetowej hahahah http://www.workerman.net/en/ )
Prostym sposobem na wyjaśnienie tego jest to, że jeśli chodzi o programowanie za pomocą gniazda sieciowego, wszystko, czego naprawdę potrzebujesz, to mieć 2 pliki na serwerze lub serwerze lokalnym (gdziekolwiek pracujesz).
server.php (kod źródłowy, który odpowie na wszystkie żądania klienta)
client.php / client.html (kod źródłowy, który wykona żądane rzeczy)
Więc w zasadzie najpierw poprawiasz kod na swoim server.php i uruchamiasz serwer. Zwykle, ponieważ używam systemu Windows, który dodaje więcej trudności, uruchamiam serwer za pomocą tego polecenia -> php server.php start
Cóż, jeśli używasz Xampp. Oto jeden sposób, aby to zrobić. Idź tam, gdzie chcesz umieścić swoje pliki. W naszym przypadku zamierzamy umieścić pliki
C: /xampp/htdocs/websocket/server.php
C: /xampp/htdocs/websocket/client.php lub client.html
Zakładając, że masz już te pliki na swoim lokalnym serwerze. Otwórz swój Git Bash, wiersz poleceń lub terminal lub cokolwiek, z którego korzystasz i pobierz biblioteki php tutaj.
https://github.com/walkor/Workerman
https://github.com/walkor/phpsocket.io
Zwykle pobieram go przez kompozytora i po prostu automatycznie ładuję te pliki w moich skryptach php.
A także sprawdź ten. To jest naprawdę ważne ! Potrzebujesz tej biblioteki javascript, aby twój client.php lub client.html komunikował się z server.php po uruchomieniu.
https://github.com/walkor/phpsocket.io/tree/master/examples/chat/public/socket.io-client
Po prostu skopiowałem i wkleiłem ten folder socket.io-client na tym samym poziomie co mój server.php i mój client.php
Tutaj jest kod źródłowy server.php
A oto kod źródłowy client.php lub client.html
Jeszcze raz otwórz wiersz poleceń, git bash lub terminal, w którym umieściłeś plik server.php. Więc w naszym przypadku jest to C: / xampp / htdocs / websocket / i wpisaliśmy php server.php start i naciśnij enter.
Następnie przejdź do przeglądarki i wpisz http: //localhost/websocket/client.php, aby odwiedzić swoją witrynę. Następnie po prostu wpisz cokolwiek do tego pola tekstowego, a zobaczysz podstawowe gniazdo php w podróży!
Musisz tylko pamiętać. W programowaniu gniazd sieciowych wystarczy serwer i klient. Najpierw uruchom kod serwera, a następnie otwórz kod klienta. I masz to! Mam nadzieję że to pomoże!
źródło
Jeśli naprawdę chcesz używać PHP jako zaplecza dla WebSockets, te linki mogą Cię poprowadzić:
https://github.com/lemmingzshadow/php-websocket
http://www.htmlgoodies.com/html5/other/create-a-bi-directional-connection-to-a-php-server-using-html5-websockets.html#fbid=QqpDVi8FqD9
źródło
Co powiesz na to ? PHPSocketio ?? Jest to alternatywa dla serwera php socket.io po stronie serwera. Pętla zdarzeń jest oparta na rozszerzeniu zdarzenia pecl. Chociaż do tej pory sam tego nie próbowałem.
źródło
Jesteśmy teraz w 2018 roku i hoola, jest sposób na zaimplementowanie WS i WAMPServer na php. Nazywa się Ratchet .
źródło
Jeszcze tego nie próbowałem, ale powinieneś być w stanie to zrobić z ReactPHP i tym komponentem gniazda . Wygląda jak Node, ale w PHP.
źródło
Poszukaj w tych bibliotekach php http://phptrends.com/category/70 . Lub użyj natywnego z php http://www.php.net/manual/en/book.sockets.php .
źródło
Szukałem naprawdę prostego sposobu, aby PHP wysłał wiadomość socket.io do klientów.
Nie wymaga to żadnych dodatkowych bibliotek PHP - po prostu używa gniazd.
Zamiast próbować połączyć się z interfejsem WebSocket, jak w przypadku wielu innych rozwiązań, po prostu połącz się z serwerem node.js i użyj go,
.on('data')
aby odebrać wiadomość.Następnie
socket.io
możesz przekazać go klientom.Wykryj połączenie z serwera PHP w Node.js w następujący sposób:
Oto niesamowicie prosty kod php - opakowałem go w funkcję - możesz wymyślić coś lepszego.
Zauważ, że
8080
jest to port do mojego serwera Node.js - możesz chcieć zmienić.Możesz go używać w ten sposób:
sio_message("chat message","Hello from PHP!");
Możesz także wysyłać tablice, które są konwertowane na json i przekazywane klientom.
sio_message("DataUpdate",Array("Data1" => "something", "Data2" => "something else"));
Jest to przydatny sposób „zaufania”, że Twoi klienci otrzymują prawidłowe wiadomości z serwera.
Możesz również pozwolić PHP przekazywać aktualizacje bazy danych bez konieczności wysyłania setek klientów do bazy danych.
Żałuję, że nie znalazłem tego wcześniej - mam nadzieję, że to pomoże! 😉
źródło
s.remoteAddress;
. Jednak nie udaje mi się to. Otrzymuję połączenie w węźle, wykrywa połączenie, zdalnyadres jest poprawny, ales.on('data')
nigdy się nie dzieje, ale nic się nie dzieje. Jas.on('msg')
też próbowałem . Używam twojego dokładnego kodu PHP. Używam protokołu https jako serwera węzłów, ale to nie powinno mieć znaczenia?8080
? Jeśli nie, musisz zmienić port. Jeśli tak, sprawdź,Remote Address
który jest zwracany - upewnij się, że jest to adres zwrotny / lokalny - może być inny w przypadku konfiguracji serwera. Do testowania możesz usunąć wierszif(s.remoteAddress == "::ffff:127.0.0.1")