У меня есть веб-приложение, написанное в Laravel 4. Это приложение использует Ratchet и, если быть более конкретным, оно использует пакет Latchet. В качестве побочного я использую следующие методы:
Теперь я получил следующий сценарий:
- У меня есть слайд-шоу, которое должно получать обновления через websocket.
- Все приложение настроено, и я могу публиковать новые изменения кода с 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 и затем инициализировать мой клиент websocket, который затем получит дополнительные обновления (если они есть)?
- Или должен ли я, когда я зарегистрирую новый клиент websocket, предоставить дополнительный параметр с запросом, чтобы сервер отправил мне полные данные через websockets?
Последний из двух вариантов кажется лучшим вариантом для меня, но я действительно не знаю, как реализовать это в хорошем смысле.