У меня есть веб-приложение, написанное на Laravel 4. Это приложение использует Ratchet, а точнее, пакет Latchet. В качестве примечания я использую следующие методы:
Теперь я получил следующий сценарий:
- У меня есть слайд-шоу, которое должно получать обновления через веб-сокет.
- Все приложение настроено, и я могу публиковать новые изменения кода с PHP на своих клиентах веб-сокетов через ZeroMq.
В моем route.php у меня есть следующий код, чтобы тема была зарегистрирована правильно:
//routes.php // Setup a connection and register a topic where clients can connect to. Latchet::connection('Connection'); Latchet::topic('PhotoStream/{client}', 'PhotoStreamController');
Затем я запускаю храповой сервер.
sudo php artisan latchet:listen
Когда фотография загружена, я могу запустить следующий код, чтобы отправить обновления клиентам, которые слушают мою тему (в данном случае PhotoStream/client1
):
// 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() ));
Этот код все работает, но это на случай обновления. Мой вопрос заключается в следующем:
Как я должен обрабатывать инициализацию клиента?
- Должен ли я сначала отображать страницу с помощью простого старого PHP, а затем инициализировать мой клиент веб-сокета, который затем получает дальнейшие обновления (если они есть)?
- Или я должен, когда я регистрирую новый клиент веб-сокета, указать дополнительный параметр с запросом, чтобы сервер отправлял мне полные данные через веб-сокеты?
Последний из двух вариантов кажется мне лучшим вариантом, но я действительно не знаю, как это реализовать по-хорошему.