【发布时间】:2018-06-11 13:47:29
【问题描述】:
我遇到了一个奇怪的情况,在 Laravel 5.6 中使用 Pusher(重要的是要指出一切正常),我收到双倍通知(都在控制台 @浏览器中的开发者控制台和 Pusher 应用程序中的调试控制台)。
我在我的应用程序中找不到任何双倍的推送器代码,所以这让我有点恼火。
这是来自开发者控制台的代码截图: Developer's console.
这里来自调试控制台:Debug Console。
另外,我附上代码中最重要的部分:
//view.blade.php
<script type="application/javascript">
$(document).ready(function() {
Pusher.logToConsole = true;
var pusher = new Pusher('xxxxxxxxxxxxxxxxxxxx', {
cluster: 'eu',
encrypted: true
});
var channel = pusher.subscribe('update-date-channel');
channel.bind('App\\Events\\Event', function(data) {
$(".list-group").find("#" + data.updatedItemId).html(data.updatedDate);
});
})
// 控制器(我通过它发送更新的值)
public function addbid(Request $request)
{
/*
...
*/
event(new Event($updatedDate = $newDate->toArray("date")["formatted"], $request -> id));
Session::flash('message', "Bid added succesfully!");
return Redirect::back();
}
// 这里是来自 App\Events\Event 的整个 Event 文件
<?php
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class Event implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $updatedDate;
public $updatedItemId;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct($updatedDate, $updatedItemId)
{
$this->updatedDate = $updatedDate;
$this->updatedItemId = $updatedItemId;
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn()
{
return ['update-date-channel'];
}
}
在 resources/assets/js 我没有更改 app.js 中的任何内容,在 bootstrap.js 中我只是取消了最后一部分的注释(开头的部分:“import Echo from 'laravel-echo '...")。
【问题讨论】:
-
这是因为您订阅了同一个频道两次(您可以在浏览器日志中看到这一点)。您可以尝试在
var channel = pusher.subscribe('update-date-channel');之前放置一个日志行,以检查它没有被调用两次。搜索对subscribe()的其他调用也是值得的。 -
@WillSewell 好吧,但是我正在查看所有已编辑的文件,我在任何地方都看不到双重订阅...仅在第一篇文章中提供的 view.blade.php 中,有什么想法吗?顺便说一句,感谢您对这个话题感兴趣:)
标签: javascript php laravel pusher