目标效果:像QQ邮箱那样,在收到服务器通知的时候在页面上主动弹出提示框。
在很多场景中,我们不能等待服务器做出响应,例如有些业务是需要人工进行处理的,可能耗时几小时才有结果,但是我们又需要在有结果的时候及时收到回馈,那么这里有几个选择:1.手动刷新2.前端循环ajax请求3.websocket。第一个不用说了吧,不太可能考虑,第二个的话服务器压力会很大,因为两小时内一个浏览器就能发出成百上千次请求,用户多的情况下处理请求量太大,所以这里采用websocket的方法,我不知道qq邮箱是否也是用这种方法,但是在中小型网站中应用这种方法能做到差不多的效果。当然,广播事件传输的仅仅是数据而已,你可以编写前端js,在接收到服务器数据的时候将数据包装成任意需要的样式。
参考资料:https://segmentfault.com/a/1190000002921506
事前准备:redis、node、wamp/lamp环境、一个能用的laravel项目
—————————————————————————————————————————————————————
一、配置
config/broadcasting.php中,如下配置’default’ => env(‘BROADCAST_DRIVER’,’redis’),使用redis作为php和js的通信方式。 config/database.php中配置redis的连接。
——————————————————————————————————————————————
二、定义一个广播事件
根据Laravel文档的说明,想让事件被广播,必须让Event类实现一个Illuminate\Contracts\Broadcasting\ShouldBroadcast接口,并且实现一个方法broadcastOn。broadcastOn返回一个数组,包含了事件发送到的channel(频道)。如下:
<?php
namespace App\Events;
use App\Events\Event;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class SomeEvent extends Event implements ShouldBroadcast
{
use SerializesModels;
public $user_id;
public $m1;
p