software socketio socket setup medium event laravel laravel-4 zeromq phpwebsocket ratchet

laravel - socketio - ¿La mejor práctica al usar websockets?



npm install laravel echo server (2)

En el lado de javascript (para recuperar la lista inicial):

//session.subscribe(....) session.call(''route/to/controller'', arg1, arg2).then(function(res) { console.log(res) //initial collection of photos });

En el lado php (para recuperar la lista inicial):

public function call($connection, $id, $topic, $params) { //the id is needed to be able to trace your async calls back to the right promise $connection->callResult($id, $this->getInitialPhotosFilteredByParams($params)); });

Como ya has obtenido actualizaciones exitosamente mediante la suscripción, esto es todo lo que necesitas. Sin embargo, ten cuidado con xss, los params pueden no estar filtred.

Tengo una aplicación web escrita en Laravel 4. Esta aplicación hace uso de Ratchet y, para ser más específico, usa el paquete Latchet . Como nota al margen, estoy usando las siguientes técnicas:

Ahora tengo el siguiente escenario:

  • Tengo una presentación de diapositivas que debe recibir actualizaciones a través del websocket.
  • Toda la aplicación está configurada y puedo publicar nuevos cambios de código desde PHP a mis clientes de websocket a través de ZeroMq.
  • En mi routes.php, tengo el siguiente código, para que un tema se registre correctamente:

    //routes.php // Setup a connection and register a topic where clients can connect to. Latchet::connection(''Connection''); Latchet::topic(''PhotoStream/{client}'', ''PhotoStreamController'');

  • Entonces, inicio el servidor de trinquete.

sudo php artisan latchet:listen

Cuando se carga una foto, puedo ejecutar el siguiente código para enviar actualizaciones a los clientes que están escuchando mi tema ( PhotoStream/client1 en este caso):

// Create the object, save it to db and then publish it to my websockets $photo = new Photo; $photo->location = ''path/to/file''; $photo->save(); // Publish it through my websocket clients. (push from server). Latchet::publish(''PhotoStream/client1'', array(''msg'' => $photo->toArray() ));

Este código funciona, pero es en el caso de una actualización. Mi pregunta es la siguiente:

¿Cómo debo manejar la inicialización del cliente?

  1. ¿Debo primero renderizar la página con PHP antiguo y luego inicializar mi cliente de websocket, que luego recibiré más actualizaciones (si hay alguna) ?.
  2. ¿O debería, cuando registro un nuevo cliente de websocket, dar un parámetro adicional con la solicitud para que el servidor me envíe los datos completos a través de websockets?

La última de las dos opciones me parece la mejor opción, pero realmente no sé cómo implementarla de una buena manera.


Si entendió su pregunta de la manera correcta, esta es la siguiente: Se pregunta si el envío de imágenes a través de la conexión web es una buena idea si esas imágenes también pueden ser precargadas desde PHP.

Le sugiero que use PHP para precargar las imágenes sin usar el websocket y que empiece a usar el socket una vez que se agreguen nuevas imágenes.

De esta forma, el usuario debería ver las imágenes desde el momento en que se carga la página y no tendrá que esperar a que se establezca la conexión del websocket.

Si prefieres cargar el socket, te sugiero que cargues las primeras imágenes desde el control deslizante, que se puede ver de inmediato, desde PHP. De lo contrario, el usuario tendrá que esperar más tiempo (tenga en cuenta que mucho, pero aún más notable).