我有一个用 Laravel 4 编写的 web 应用程序。这个应用程序使用 Ratchet,更具体地说,它使用Latchet包。作为旁注,我正在使用以下技术:
现在我得到了以下场景:
- 我有一个幻灯片,它应该通过 websocket 接收更新。
- 整个应用程序已设置好,我可以通过 ZeroMq 将新的代码更改从 PHP 发布到我的 websocket 客户端。
在我的 routes.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 向我发送完整的数据?
这两个选项中的后者对我来说似乎是最好的选择,但我真的不知道如何以一种好的方式实现它。