php socket.io

Usando PHP con Socket.io



(11)

¡Si quiere usar socket.io junto con php, esta puede ser su respuesta!

sitio web del proyecto:

elephant.io

ellos también están en github:

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

Elephant.io proporciona un cliente socket.io completamente escrito en PHP que debe ser utilizable en cualquier lugar de su proyecto.

Es una biblioteca liviana y fácil de usar que tiene como objetivo llevar algunas funcionalidades en tiempo real a una aplicación PHP a través de socket.io y websockets para acciones que no se pueden hacer en javascript completo.

ejemplo del sitio web del proyecto (comunicarse con el servidor websocket a través de php)

servidor php

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`'';

servidor socket io

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); }); });

¿Es posible usar Sockets.io en el lado del cliente y comunicarse con una aplicación basada en PHP en el servidor? ¿PHP incluso admite una forma de escritura de ''larga vida'' para escribir código?

Todo el código de muestra que encuentro para socket.io parece ser para node.js en el lado del servidor, por lo que no hay ayuda allí.


Erm, ¿por qué querrías? Deje PHP en el backend y NodeJS / Sockets para hacer su cosa sin bloqueo.

Aquí hay algo para que comiences: http://groups.google.com/group/socket_io/browse_thread/thread/74a76896d2b72ccc

Personalmente, ejecuto Express con un punto final que escucha expresamente la interacción de PHP.

Por ejemplo, si he enviado un correo electrónico a un usuario, quiero que socket.io muestre una notificación en tiempo real al usuario.

Quiere interacción de socket.io a php, así que puede hacer algo como esto:

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();

En serio, PHP es genial para hacer cosas del lado del servidor y dejar que sea con las conexiones que no tiene lugar en este dominio ahora. ¿Por qué hacer cualquier consulta larga cuando tiene websockets o sockets de memoria?


Estaba buscando una manera muy simple de hacer que PHP envíe un mensaje de socket.io a los clientes.

Esto no requiere ninguna biblioteca PHP adicional, solo usa sockets.

En lugar de tratar de conectarse a la interfaz websocket como tantas otras soluciones, simplemente conéctese al servidor node.js y use .on(''data'') para recibir el mensaje.

Entonces, socket.io puede reenviarlo a los clientes.

Detecta una conexión desde tu servidor PHP en Node.js de la siguiente manera:

//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 }); } });

Aquí está el código php increíblemente simple - lo envolví en una función - puede llegar a algo mejor.

Tenga en cuenta que 8080 es el puerto de mi servidor Node.js; es posible que desee cambiar.

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); }

Puedes usarlo así:

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

También puede enviar matrices que se convierten en json y se envían a los clientes.

sio_message("DataUpdate",Array("Data1" => "something", "Data2" => "something else"));

Esta es una forma útil de "confiar" en que sus clientes reciben mensajes legítimos del servidor.

También puede hacer que PHP pase las actualizaciones de la base de datos sin que cientos de clientes consulten la base de datos.

Desearía haber encontrado esto antes, ¡espero que esto ayude! 😉



Para la "conexión duradera" que mencionaste, puedes usar Ratchet para PHP. Es una biblioteca construida en base a las funciones Stream Socket que PHP ha soportado desde PHP 5.

Para el lado del cliente, necesita usar WebSocket compatible con HTML5 en lugar de Socket.io (ya que sabe, socket.io solo funciona con node.js).

En caso de que aún desee usar Socket.io, puede intentarlo de esta manera: - encuentre y obtenga socket.io.js para que lo use el cliente - trabaje con Ratchet para simular la forma en que socket.io lo hace en el servidor

¡Espero que esto ayude!


Puede ser un poco tarde para que se responda esta pregunta, pero esto es lo que encontré.

No quiero debatir sobre el hecho de que los nodos hacen eso mejor que php o no, este no es el punto.

La solución es: no he encontrado ninguna implementación de socket.io para PHP.

Pero hay algunas formas de implementar WebSockets . Existe este plugin jQuery que le permite usar Websockets a la vez que degrada graciosamente para navegadores no compatibles. En el lado de PHP, existe esta clase que parece ser la más utilizada para servidores PHP WS.


Qué tal esto ? https://github.com/RickySu/phpsocket.io ?? Es una alternativa del lado del servidor socket.io php. El ciclo de eventos se basa en la extensión de eventos pecl. Aunque no lo he probado hasta ahora.



Si realmente quiere usar PHP como back-end para socket.io, aquí está lo que encontré. Dos socket.io php lado del servidor alternativa.

github.com/walkor/phpsocket.io

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

Códigos Exmaple para el primer repositorio como este.

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); }); });