¿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 código de 'conexión duradera'?
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í.
Respuestas:
Puede que sea un poco tarde para responder esta pregunta, pero esto es lo que encontré.
No quiero debatir sobre el hecho de que los nodos lo hacen 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 complemento jQuery que le permite usar Websockets mientras degrada con gracia para navegadores no compatibles. En el lado de PHP, existe esta clase que parece ser la más utilizada para los servidores PHP WS.
fuente
Si quieres usar socket.io junto con php, ¡esta puede ser tu respuesta!
sitio web del proyecto:
elephant.io
también están en github:
https://github.com/wisembly/elephant.io
Elephant.io proporciona un cliente socket.io totalmente escrito en PHP que debería poder usarse en cualquier parte de su proyecto.
Es una biblioteca liviana y fácil de usar que tiene como objetivo brindar alguna funcionalidad en tiempo real a una aplicación PHP a través de socket.io y websockets para acciones que no se pudieron realizar en javascript completo.
ejemplo del sitio web del proyecto (comunicarse con el servidor websocket a través de php)
servidor php
servidor io socket
fuente
ACTUALIZACIÓN: agosto de 2014 El sitio actual socket.io v1.0 tiene un ejemplo de PHP: - https://github.com/rase-/socket.io-php-emitter
fuente
Si realmente desea utilizar PHP como back-end para socket.io, aquí está lo que encontré. Dos alternativas del lado del servidor socket.io php.
https://github.com/walkor/phpsocket.io
https://github.com/RickySu/phpsocket.io
Códigos de ejemplo para el primer repositorio como este.
fuente
Para la "conexión de larga duración" que mencionó, puede usar Ratchet para PHP. Es una biblioteca construida basada en las funciones de Stream Socket que PHP ha admitido desde PHP 5.
Para el lado del cliente, debe usar WebSocket compatible con HTML5 en lugar de Socket.io (como 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 el cliente lo use - trabaje con Ratchet para simular la forma en que socket.io lo hace en el servidor
¡Espero que esto ayude!
fuente
Erm, ¿por qué quieres hacerlo? Deje PHP en el backend y NodeJS / Sockets para hacer lo que no bloquea.
Aquí hay algo para comenzar: http://groups.google.com/group/socket_io/browse_thread/thread/74a76896d2b72ccc
Personalmente, tengo Express corriendo con un punto final que está escuchando expresamente la interacción de PHP.
Por ejemplo, si le envié un correo electrónico a un usuario, quiero que socket.io muestre una notificación en tiempo real al usuario.
Desea la interacción de socket.io a php, bueno, puede hacer algo como esto:
En serio, PHP es ideal para hacer cosas del lado del servidor y dejarlo con las conexiones que no tiene lugar en este dominio ahora. ¿Por qué hacer encuestas largas cuando tiene websockets o flashsockets?
fuente
¡Conozco al luchador! Pero recientemente lo tuve trabajando con Workerman. Si no te has topado con este marco de trabajo de PHP, ¡entonces mira esto!
Bueno, Workerman es un marco PHP asincrónico basado en eventos para construir fácilmente aplicaciones de red rápidas y escalables. (Acabo de copiar y pegar eso desde su sitio web jajajaja http://www.workerman.net/en/ )
La manera fácil de explicar esto es que, cuando se trata de programación de socket web, todo lo que realmente necesita tener es tener 2 archivos en su servidor o servidor local (donde sea que esté trabajando).
server.php (código fuente que responderá a todas las solicitudes del cliente)
client.php / client.html (código fuente que hará las cosas solicitadas)
Básicamente, primero debes corregir el código en tu server.php e iniciar el servidor. Normalmente, como estoy usando Windows que agrega más de la lucha, ejecuto el servidor a través de este comando -> php server.php start
Bueno, si estás usando xampp. Aquí hay una forma de hacerlo. Ve a donde quieras poner tus archivos. En nuestro caso, vamos a poner los archivos en
C: /xampp/htdocs/websocket/server.php
C: /xampp/htdocs/websocket/client.php o client.html
Suponiendo que ya tiene esos archivos en su servidor local. Abra su Git Bash o línea de comando o terminal o lo que esté utilizando y descargue las bibliotecas php aquí.
https://github.com/walkor/Workerman
https://github.com/walkor/phpsocket.io
Por lo general, lo descargo a través del compositor y simplemente autocargo esos archivos en mis scripts php.
Y también mira este. ¡Esto es realmente importante ! Necesita esta biblioteca de JavaScript para que client.php o client.html se comuniquen con el server.php cuando lo ejecute.
https://github.com/walkor/phpsocket.io/tree/master/examples/chat/public/socket.io-client
Simplemente copié y pegué esa carpeta socket.io-client en el mismo nivel que mi server.php y mi client.php
Aquí está el código fuente server.php
Y aquí está el código fuente client.php o client.html
Una vez más, abra su línea de comando o git bash o terminal donde coloca su archivo server.php. Entonces, en nuestro caso, eso es C: / xampp / htdocs / websocket / y escribió php server.php start y presione enter.
Luego vaya a su navegador y escriba http: //localhost/websocket/client.php para visitar su sitio. Luego, escriba cualquier cosa en ese cuadro de texto y verá un php websocket básico sobre la marcha.
Usted sólo tiene que recordar. En la programación de sockets web, solo necesita un servidor y un cliente. Ejecute primero el código del servidor y abra el código del cliente. ¡Y ahí lo tienes! ¡Espero que esto ayude!
fuente
Si realmente desea utilizar PHP como back-end para WebSockets, estos enlaces pueden ayudarlo a seguir su camino:
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
fuente
Qué tal esto ? PHPSocketio ?? Es una alternativa del lado del servidor socket.io php. El bucle de eventos se basa en la extensión de eventos pecl. Aunque no lo he probado hasta ahora.
fuente
Ahora estamos en 2018 y hoola, hay una manera de implementar WS y WAMPServer en php. Se llama Ratchet .
fuente
Todavía no lo he probado, pero deberías poder hacerlo con ReactPHP y este componente de socket . Se parece a Node, pero en PHP.
fuente
Busque en esta biblioteca para php http://phptrends.com/category/70 . O use nativo de php http://www.php.net/manual/en/book.sockets.php .
fuente
Estaba buscando una forma realmente simple de hacer que PHP envíe un mensaje socket.io a los clientes.
Esto no requiere ninguna biblioteca PHP adicional, solo usa sockets.
En lugar de intentar conectarse a la interfaz websocket como tantas otras soluciones, simplemente conéctese al servidor node.js y úselo
.on('data')
para recibir el mensaje.Luego,
socket.io
puede reenviarlo a los clientes.Detecta una conexión desde tu servidor PHP en Node.js así:
Aquí está el código php increíblemente simple: lo envolví en una función, puede encontrar algo mejor.
Tenga en cuenta que ese
8080
es el puerto para mi servidor Node.js; es posible que desee cambiarlo.Puedes usarlo así:
sio_message("chat message","Hello from PHP!");
También puede enviar matrices que se convierten a json y se pasan 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! 😉
fuente
s.remoteAddress;
. Sin embargo, no lo estoy haciendo funcionar. Obtengo la conexión en el nodo, detecta la conexión, la dirección remota es correcta, peros.on('data')
nunca sucede, pero no pasa nada. Yos.on('msg')
también lo intenté . Estoy usando tu código PHP exacto. Estoy usando https, para el servidor de nodo, pero eso no debería importar?8080
? Si no, necesita cambiar el puerto. Si es así, verifiqueRemote Address
que se devuelve, asegúrese de que sea la dirección local / de bucle invertido, puede ser diferente con la configuración de su servidor. Para probar, puede eliminar la líneaif(s.remoteAddress == "::ffff:127.0.0.1")