gpt4 book ai didi

laravel - 使用 websockets 时的最佳实践?

转载 作者:行者123 更新时间:2023-12-03 10:05:25 25 4
gpt4 key购买 nike

我有一个用 Laravel 4 编写的 web 应用程序。这个应用程序使用了 Ratchet,更具体地说,它使用了包 Latchet .作为旁注,我正在使用以下技术:

  • AutoBahn JS
  • ZeroMQ
  • Ratchet

  • 现在我得到了以下场景:
  • 我有一个幻灯片,它应该通过 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');
  • 然后,我启动 Ratchet 服务器。
  • 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 向我发送完整的数据?

  • 这两个选项中的后者对我来说似乎是最好的选择,但我真的不知道如何以一种好的方式实现它。

    最佳答案

    在 javascript 方面(检索初始列表):

    //session.subscribe(....)

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

    在 php 端(检索初始列表):
    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));
    });

    由于您已经通过订阅成功获得更新,这就是您所需要的。不过要注意 xss,参数可能不会被过滤。

    关于laravel - 使用 websockets 时的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18966667/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com