Ist es möglich, Sockets.io auf der Clientseite zu verwenden und mit einer PHP-basierten Anwendung auf dem Server zu kommunizieren? Unterstützt PHP überhaupt eine solche "langlebige Verbindung" zum Schreiben von Code?
Der gesamte Beispielcode, den ich für socket.io finde, scheint für node.js auf der Serverseite zu sein, daher gibt es dort keine Hilfe.
Antworten:
Es mag etwas spät sein, diese Frage zu beantworten, aber hier ist, was ich gefunden habe.
Ich möchte nicht darüber diskutieren, dass Knoten das besser machen als PHP oder nicht, das ist nicht der Punkt.
Die Lösung lautet: Ich habe keine Implementierung von socket.io für PHP gefunden.
Es gibt jedoch einige Möglichkeiten, WebSockets zu implementieren . Es gibt dieses jQuery-Plugin , mit dem Sie Websockets verwenden können, während Sie sich für nicht unterstützende Browser elegant verschlechtern. Auf der PHP-Seite gibt es diese Klasse , die am häufigsten für PHP-WS-Server verwendet wird.
quelle
Wenn Sie socket.io zusammen mit PHP verwenden möchten, kann dies Ihre Antwort sein!
Projektwebsite:
elefant.io
Sie sind auch auf Github:
https://github.com/wisembly/elephant.io
Elephant.io bietet einen vollständig in PHP geschriebenen Socket.io-Client, der überall in Ihrem Projekt verwendet werden kann.
Es ist eine leichte und benutzerfreundliche Bibliothek, die darauf abzielt, einer PHP-Anwendung über socket.io und Websockets Echtzeitfunktionen für Aktionen bereitzustellen, die nicht in vollständigem Javascript ausgeführt werden konnten.
Beispiel von der Projektwebsite (Kommunikation mit dem Websocket-Server über PHP)
PHP-Server
Socket Io Server
quelle
UPDATE: Aug 2014 Die aktuelle socket.io v1.0- Site enthält ein PHP-Beispiel: - https://github.com/rase-/socket.io-php-emitter
quelle
Wenn Sie PHP wirklich als Backend für socket.io verwenden möchten, habe ich Folgendes gefunden. Zwei socket.io PHP serverseitige Alternative.
https://github.com/walkor/phpsocket.io
https://github.com/RickySu/phpsocket.io
Beispielcodes für das erste Repository wie dieses.
quelle
Für die von Ihnen erwähnte "langlebige Verbindung" können Sie Ratchet für PHP verwenden. Es ist eine Bibliothek, die auf Stream Socket-Funktionen basiert, die PHP seit PHP 5 unterstützt.
Für die Clientseite müssen Sie WebSocket verwenden, das von HTML5 unterstützt wird, anstelle von Socket.io (da Sie wissen, funktioniert socket.io nur mit node.js).
Wenn Sie Socket.io weiterhin verwenden möchten, können Sie Folgendes versuchen: - Suchen und Abrufen von socket.io.js für den Client - Arbeiten Sie mit Ratchet zusammen, um die Vorgehensweise von socket.io auf dem Server zu simulieren
Hoffe das hilft!
quelle
Ähm, warum willst du das? Lassen Sie PHP im Backend und NodeJS / Sockets, um die nicht blockierende Aufgabe zu erledigen.
Hier finden Sie Informationen zum Einstieg: http://groups.google.com/group/socket_io/browse_thread/thread/74a76896d2b72ccc
Persönlich habe ich Express-Laufen mit einem Endpunkt, der ausdrücklich auf die Interaktion von PHP wartet.
Wenn ich beispielsweise einem Benutzer eine E-Mail gesendet habe, soll socket.io dem Benutzer eine Echtzeitbenachrichtigung anzeigen.
Willst du Interaktion von socket.io zu PHP, dann kannst du einfach so etwas machen:
Im Ernst, PHP ist großartig, um serverseitige Dinge zu erledigen und es mit den Verbindungen zu tun, die es derzeit in dieser Domäne nicht hat. Warum sollten Sie lange abfragen, wenn Sie Websockets oder Flashsockets haben?
quelle
Ich kenne den Kämpfer! Aber ich hatte es vor kurzem ziemlich mit Workerman zu tun. Wenn Sie nicht über dieses PHP-Framework gestolpert sind, sollten Sie dies überprüfen!
Nun, Workerman ist ein asynchrones ereignisgesteuertes PHP-Framework zum einfachen Erstellen schneller, skalierbarer Netzwerkanwendungen. (Ich habe das gerade von ihrer Website kopiert und eingefügt, hahahah http://www.workerman.net/en/ )
Die einfache Möglichkeit, dies zu erklären, besteht darin, dass Sie für die Web-Socket-Programmierung lediglich zwei Dateien auf Ihrem Server oder lokalen Server (wo immer Sie arbeiten) benötigen.
server.php (Quellcode, der auf alle Anfragen des Clients reagiert)
client.php / client.html (Quellcode, der die anfordernden Dinge erledigt )
Im Grunde genommen korrigieren Sie den Code zuerst auf Ihrer server.php und starten den Server. Normalerweise starte ich den Server über diesen Befehl -> php server.php start , da ich Windows verwende, das den Kampf noch verstärkt
Nun, wenn Sie xampp verwenden. Hier ist eine Möglichkeit, dies zu tun. Gehen Sie dorthin, wo Sie Ihre Dateien ablegen möchten. In unserem Fall werden wir die Dateien ablegen
C: /xampp/htdocs/websocket/server.php
C: /xampp/htdocs/websocket/client.php oder client.html
Angenommen, Sie haben diese Dateien bereits auf Ihrem lokalen Server. Öffnen Sie Ihren Git Bash oder Command Line oder Terminal oder was auch immer Sie verwenden und laden Sie die PHP-Bibliotheken hier herunter.
https://github.com/walkor/Workerman
https://github.com/walkor/phpsocket.io
Normalerweise lade ich es über den Composer herunter und lade diese Dateien automatisch in meine PHP-Skripte.
Und überprüfen Sie auch dieses. Das ist wirklich wichtig ! Sie benötigen diese Javascript-Bibliothek, damit client.php oder client.html beim Ausführen mit server.php kommunizieren können.
https://github.com/walkor/phpsocket.io/tree/master/examples/chat/public/socket.io-client
Ich habe gerade diesen socket.io-client-Ordner auf derselben Ebene wie meine server.php und meine client.php kopiert und eingefügt
Hier ist der server.php Quellcode
Und hier ist die client.php oder client.html Source
Öffnen Sie erneut Ihre Befehlszeile oder Git Bash oder Ihr Terminal, in dem Sie Ihre server.php-Datei ablegen. In unserem Fall ist das also C: / xampp / htdocs / websocket / und wir geben php server.php ein und drücken die Eingabetaste.
Gehen Sie dann zu Ihrem Browser und geben Sie http: //localhost/websocket/client.php ein , um Ihre Site zu besuchen. Geben Sie dann einfach etwas in dieses Textfeld ein und Sie werden unterwegs einen einfachen PHP-Websocket sehen!
Sie müssen sich nur erinnern. Bei der Web-Socket-Programmierung werden lediglich ein Server und ein Client benötigt. Führen Sie zuerst den Servercode aus und öffnen Sie den Clientcode. Und da hast du es! Hoffe das hilft!
quelle
Wenn Sie PHP wirklich als Backend für WebSockets verwenden möchten, können Sie sich über diese Links auf den Weg machen:
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
quelle
Wie wäre es damit ? PHPSocketio ?? Es ist eine socket.io PHP-Server-Alternative. Die Ereignisschleife basiert auf der Erweiterung des Pecl-Ereignisses. Obwohl ich es bis jetzt noch nicht selbst ausprobiert habe.
quelle
Ich habe es noch nicht ausprobiert, aber Sie sollten dies mit ReactPHP und dieser Socket-Komponente tun können . Sieht genauso aus wie Node, aber in PHP.
quelle
Wir sind jetzt im Jahr 2018 und hoola, es gibt eine Möglichkeit, WS und WAMPServer auf PHP zu implementieren. Es heißt Ratsche .
quelle
Suchen Sie in diesen Bibliotheken nach PHP http://phptrends.com/category/70 . Oder verwenden Sie native von PHP http://www.php.net/manual/en/book.sockets.php .
quelle
Ich suchte nach einer wirklich einfachen Möglichkeit, PHP dazu zu bringen, eine socket.io-Nachricht an Clients zu senden.
Dies erfordert keine zusätzlichen PHP-Bibliotheken - es werden nur Sockets verwendet.
Anstatt wie so viele andere Lösungen zu versuchen, eine Verbindung zur Websocket-Schnittstelle herzustellen, stellen Sie einfach eine Verbindung zum Server node.js her und verwenden Sie diese
.on('data')
, um die Nachricht zu empfangen.Dann
socket.io
kann es an Kunden weiterleiten.Erkennen Sie eine Verbindung von Ihrem PHP-Server in Node.js wie folgt:
Hier ist der unglaublich einfache PHP-Code - ich habe ihn in eine Funktion eingewickelt - Sie können sich etwas Besseres einfallen lassen.
Beachten Sie, dass dies
8080
der Port zu meinem Node.js-Server ist - möglicherweise möchten Sie ihn ändern.Sie können es so verwenden:
sio_message("chat message","Hello from PHP!");
Sie können auch Arrays senden, die in json konvertiert und an Clients weitergegeben werden.
sio_message("DataUpdate",Array("Data1" => "something", "Data2" => "something else"));
Dies ist eine nützliche Methode, um zu "vertrauen", dass Ihre Clients legitime Nachrichten vom Server erhalten.
Sie können PHP auch Datenbankaktualisierungen weitergeben lassen, ohne dass Hunderte von Clients die Datenbank abfragen.
Ich wünschte, ich hätte das früher gefunden - hoffe, das hilft! 😉
quelle
s.remoteAddress;
. Ich bekomme es jedoch nicht zum Laufen. Ich bekomme die Verbindung im Knoten, es erkennt die Verbindung, die Remoteadresse ist korrekt, aber ess.on('data')
passiert nie, aber nichts passiert. Ich habe es auch versuchts.on('msg')
. Ich verwende Ihren genauen PHP-Code. Ich verwende https für den Knotenserver, aber das sollte keine Rolle spielen?8080
? Wenn nicht, müssen Sie den Port ändern. Wenn ja, überprüfen Sie, ob dasRemote Address
zurückgegeben wird - stellen Sie sicher, dass es sich um die Loopback- / lokale Adresse handelt - dies kann bei Ihrem Server-Setup anders sein. Zum Testen können Sie die Zeileif(s.remoteAddress == "::ffff:127.0.0.1")