it-swarm.com.de

Verwenden von PHP mit Socket.io

Ist es möglich, Sockets.io auf der Client-Seite zu verwenden und mit einer PHP) -basierten Anwendung auf dem Server zu kommunizieren? Unterstützt PHP gelebte Verbindung 'Art, Code zu schreiben?

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.

115
Yuvi

Es mag etwas spät sein, diese Frage zu beantworten, aber hier ist, was ich gefunden habe.

Ich möchte nicht darüber diskutieren, ob Nodes das besser macht als PHP oder nicht, das ist nicht der Punkt.

Die Lösung ist: 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 , das es Ihnen ermöglicht, Websockets zu verwenden, während nicht unterstützende Browser ordnungsgemäß beeinträchtigt werden. Auf der Seite PHP) gibt es diese Klasse , die am häufigsten für PHP= WS-Server verwendet wird.

97

Wenn Sie socket.io zusammen mit PHP verwenden möchten, ist dies möglicherweise Ihre Antwort!

projekt-Website:

elephant.io

sie sind auch auf Github:

https://github.com/wisembly/elephant.io

Elephant.io stellt einen socket.io-Client zur Verfügung, der vollständig in PHP) geschrieben ist und überall in Ihrem Projekt verwendet werden kann.

Es ist eine leichte und einfach zu bedienende Bibliothek, die darauf abzielt, eine Echtzeit-Funktionalität für eine PHP) - Anwendung über socket.io und websockets für Aktionen bereitzustellen, die mit vollständigem Javascript nicht möglich sind.

beispiel von der Projekt-Website (Kommunikation mit dem Websocket-Server über PHP)

PHP-Server

use ElephantIO\Client as Elephant;

$elephant = new Elephant('http://localhost:8000', 'socket.io', 1, false, true, true);

$elephant->init();
$elephant->send(
    ElephantIOClient::TYPE_EVENT,
    null,
    null,
    json_encode(array('name' => 'foo', 'args' => 'bar'))
);
$elephant->close();

echo 'tryin to send `bar` to the event `foo`';

Socket-Io-Server

var io = require('socket.io').listen(8000);

io.sockets.on('connection', function (socket) {
  console.log('user connected!');

  socket.on('foo', function (data) {
    console.log('here we are in action event and data is: ' + data);
  });
});
68
kasper Taeymans

UPDATE: Aug 2014 Die aktuelle socket.io v1. Seite hat eine PHP Beispiel: - https://github.com/rase-/socket.io-php-emitter

20
Alvin K.

Wenn Sie wirklich PHP als Backend für socket.io verwenden möchten, habe ich Folgendes gefunden.

https://github.com/walkor/phpsocket.io

https://github.com/RickySu/phpsocket.io

Beispielcodes für das erste Repository wie dieses.

use PHPSocketIO\SocketIO;

// listen port 2021 for socket.io client
$io = new SocketIO(2021);
$io->on('connection', function($socket)use($io){
  $socket->on('chat message', function($msg)use($io){
    $io->emit('chat message', $msg);
  });
});
13
walkor

Ähm, warum willst du das? Lassen Sie PHP auf dem Backend und NodeJS/Sockets, um die nicht blockierende Sache zu erledigen.

Hier finden Sie eine Einführung: http://groups.google.com/group/socket_io/browse_thread/thread/74a76896d2b72ccc

Persönlich habe ich Express Running mit einem Endpunkt, der ausdrücklich auf Interaktion von PHP lauscht.

Wenn ich beispielsweise einem Benutzer eine E-Mail gesendet habe, soll socket.io dem Benutzer eine Echtzeitbenachrichtigung anzeigen.

Möchten Sie eine Interaktion zwischen socket.io und php? Dann können Sie einfach so etwas tun:

var http = require('http'),
            Host = WWW_Host,
            clen = 'userid=' + userid,
            site = http.createClient(80, Host),
            request = site.request("POST", "/modules/nodeim/includes/signonuser.inc.php",  
                {'Host':Host,'Content-Length':clen.length,'Content-Type':'application/x-www-form-urlencoded'});                     

request.write('userid=' + userid);      
request.end();  

Im Ernst, PHP ist großartig, um serverseitige Dinge zu erledigen und es mit den Verbindungen zu tun, die es in dieser Domäne derzeit nicht gibt. Warum sollten Sie etwas Langzeit-Polling durchführen, wenn Sie über Websockets oder Flashsockets verfügen?.

6
PaulM

Für die von Ihnen erwähnte "langlebige Verbindung" können Sie Ratchet für PHP verwenden. Es handelt sich um eine Bibliothek, die auf Stream Socket-Funktionen basiert, die PHP unterstützt seit PHP 5.

Auf der Clientseite müssen Sie WebSocket verwenden, das HTML5 anstelle von Socket.io unterstützt (da Sie wissen, funktioniert socket.io nur mit node.js).

Wenn Sie weiterhin Socket.io verwenden möchten, können Sie Folgendes versuchen: - Socket.io.js für den Client suchen und abrufen - Mit Ratchet die Vorgehensweise von Socket.io auf dem Server simulieren

Hoffe das hilft!

6
Chung Xa
4
Chris Hanson

Wie wäre es damit ? PHPSocketio ?? Dies ist eine serverseitige Alternative zu socket.io. Die Ereignisschleife basiert auf der pecl-Ereigniserweiterung. Obwohl ich es bis jetzt nicht selbst ausprobiert habe.

3
Sankalp Singha

Wir sind jetzt im Jahr 2018 und hoola, es gibt eine Möglichkeit, WS und WAMPServer auf PHP zu implementieren. Es heißt Ratsche .

2
shamaseen

Ich habe es noch nicht ausprobiert, aber Sie sollten in der Lage sein, dies mit ReactPHP und this Socket-Komponente zu tun. Sieht genauso aus wie Node, aber in PHP.

2
mpen

Ich suchte nach einer wirklich einfachen Methode, um PHP) eine socket.io-Nachricht an Clients zu senden.

Dies erfordert keine zusätzlichen PHP Bibliotheken - es werden nur Sockets verwendet.

Anstatt wie bei vielen anderen Lösungen eine Verbindung zur Websocket-Schnittstelle herzustellen, stellen Sie einfach eine Verbindung zum node.js-Server her und empfangen Sie die Nachricht mit .on('data').

Dann kann socket.io Es an Kunden weiterleiten.

Ermitteln Sie eine Verbindung von Ihrem PHP Server in Node.js wie folgt:

//You might have something like this - just included to show object setup
var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server);

server.on("connection", function(s) {
    //If connection is from our server (localhost)
    if(s.remoteAddress == "::ffff:127.0.0.1") {
        s.on('data', function(buf) {
            var js = JSON.parse(buf);
            io.emit(js.msg,js.data); //Send the msg to socket.io clients
        });
    }
});

Hier ist der unglaublich einfache PHP-Code - ich habe ihn in eine Funktion eingebunden - Sie können sich etwas Besseres einfallen lassen.

Beachten Sie, dass 8080 Der Port zu meinem Node.js-Server ist - möglicherweise möchten Sie ihn ändern.

function sio_message($message, $data) {
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    $result = socket_connect($socket, '127.0.0.1', 8080);
    if(!$result) {
        die('cannot connect '.socket_strerror(socket_last_error()).PHP_EOL);
    }
    $bytes = socket_write($socket, json_encode(Array("msg" => $message, "data" => $data)));
    socket_close($socket);
}

Du kannst es so benutzen:

sio_message("chat message","Hello from PHP!");

Sie können auch Arrays senden, die in json konvertiert und an Clients weitergeleitet 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 auch PHP Datenbankaktualisierungen weiterleiten, ohne dass Hunderte von Clients die Datenbank abfragen.

Ich wünschte, ich hätte das früher gefunden - hoffe, das hilft! ????

1
user1274820

Suchen Sie in diesen Bibliotheken nach php http://phptrends.com/category/7 . Oder benutze native von php http://www.php.net/manual/en/book.sockets.php .

0
Knase