Laravel websocket将定期广播

Laravel websocket将定期广播,laravel,websocket,Laravel,Websocket,我想知道在Laravel~7中是否有其他合适的方法来实现以下目标 目的:实时更新前端(客户端)每分钟的快速销售产品数量 方法:使用调度程序从数据库获取产品数量,并使用websocket每分钟广播一次 问题:还有其他更好的方法来实现这一点吗 事件广播(后端) StoreFrontend(客户端) Echo.channel('store') .listen('ProductQuantity',(e)=>{ 控制台日志(例如数量); }) 可能 目前,听起来您正在有效地“轮询”数据库中的产品数量,然

我想知道在Laravel~7中是否有其他合适的方法来实现以下目标

目的:实时更新前端(客户端)每分钟的快速销售产品数量

方法:使用调度程序从数据库获取产品数量,并使用websocket每分钟广播一次

问题:还有其他更好的方法来实现这一点吗

事件广播(后端)

StoreFrontend(客户端)


Echo.channel('store')
.listen('ProductQuantity',(e)=>{
控制台日志(例如数量);
})
可能

目前,听起来您正在有效地“轮询”数据库中的产品数量,然后使用WebSocket将其发送到前端。 这与使用传统轮询技术命中端点并请求最新数量没有什么不同

在我看来,一个更好的解决方案是,每当产品数量发生变化时(无论是售出还是补充库存),就发起一场活动。然后,您可以将此事件连接到前端进行广播


结果是,每当库存发生变化时,您的前端都会收到通知,而不是每分钟都进行不必要的轮询。这样做的好处是,您无需每分钟都在调度程序上敲打数据库以查看数据是否发生了更改,并且可以在产品库存发生变化时立即更新UI。

同意。“我认为这种方式更好。”如果这回答了您的问题,请问您是否介意标记为已接受(并可选择向上投票)。
// app/Events/ProductQuantity.php

class ProductQuantity implements ShouldBroadcast
{
    public $product;

    public function __construct(Product $product)
    {
        $this->product = $product;
    }

    public function broadcastWith()
    {
        return ['quantity' => $this->product->quantity];
    }

    public function broadcastOn()
    {
        return new Channel('store');
    }

}
<script>
    Echo.channel('store')
    .listen('ProductQuantity', (e) => {
        console.log(e.quantity);
    })
</script>