我已经为我的应用程序设置了Pusher和Laravel Echo,以便在某些事件触发时通知用户。
我已经测试过,看看设置是否通过在“公共频道”上播放而工作,并成功地看到这是工作。
以下是活动本身:
class ItemUpdated implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $item;
public function __construct(Item $item)
{
$this->item = $item;
}
public function broadcastOn()
{
return new Channel('items');
}
}
公共频道:
Broadcast::channel('items', function ($user, $item) {
return true;
});
app/resources/assets/js/bootstrap。js:
import Echo from 'laravel-echo';
window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',
key: 'my_key',
cluster: 'eu',
encrypted: true
});
和Laravel回声注册:(它是在我的主布局的头部部分,事件射击视图延伸。)
<head>
<meta charset="utf-8">
<meta name="csrf-token" content="{{ csrf_token() }}">
<script src="{{ asset('js/app.js') }}"></script>
<script>
window.Laravel = {'csrfToken': '{{csrf_token()}}'}
window.Echo.channel('items')
.listen('ItemUpdated', function(e) {
console.log("It is working:)");
});
</script>
</head>
现在,这种设置适用于公共频道广播,但当我尝试在私人频道广播时,我会
//updated "ItemUpdated" event broadcastOn() method
public function broadcastOn()
{
return new PrivateChannel('items');
}
//updated laravel echo registering
<script>
window.Laravel = {'csrfToken': '{{csrf_token()}}'}
window.Echo.private('items')
.listen('ItemUpdated', function(e) {
console.log("It is working:)");
});
//console logged error
Pusher couldn't get the auth user from :myapp 500
我已经检查了来自开发者控制台的传出网络请求,发现pusher正试图“发布”到
http://localhost:8000/broadcast/auth
但它得到了500个错误代码。
我想这可能有助于解决问题。
我该怎么办?
所以我想出了如何实现私有通道监听,并使其正常工作。
我的错误是通配符选择。
我告诉它使用经过身份验证的用户id作为通配符,而不是应用更改的项id。
因此,这个下面的通道注册总是返回假,并导致推销员扔500授权找不到。
Broadcast::channel('items.{item}', function ($user, \App\Item $item) {
return $user->id === $item->user_id;
});
正在播放的活动:
//ItemUpdated event
class ItemUpdated implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $item;
public function __construct(Item $item)
{
$this->item = $item;
}
public function broadcastOn()
{
return new PrivateChannel('items.'.$this->item->id);
}
}
频道注册:
app\routes\channels.php
Broadcast::channel('items.{item}', function ($user, \App\Item $item) {
return $user->id === $item->user_id;
});
Laravel回波注册:
<head>
<meta name="csrf-token" content="{{ csrf_token() }}">
<script>
window.Laravel = {'csrfToken': '{{csrf_token()}}'}
window.Echo.private(`items.{{{$item->id}}}`)
.listen('ItemUpdated', function(e) {
console.log("It is working!");
});
</script>
谢谢大家的指点。
我有安装插座。io与laravel echo一起加入并收听laravel广播频道。公共频道工作正常,因为它们不需要任何授权。专用通道未按预期工作,我可以使用套接字加入任何专用通道。未传递授权令牌的io客户端。 插座io客户端 Laravel Echo服务器配置 航道 广播服务提供商 用户配置 127.0.0.1:8000/无令牌访问时的广播/授权响应 Laravel回声服务器 所以我猜larave
我正在尝试创建一个实时聊天应用程序。我使用了Laravel Echo、Redis和socket io。 但是没有收听私人广播聊天频道。 应用程序事件消息推送
活动是: 路线/频道。php是: 在刀片文件中: 广播频道工作正常。但在私密频道里,这是行不通的。并且在控制台中没有显示任何错误 我使用拉威尔回声和推进器
我正在使用Laravel-Redis-Socketio-LaravelEcho进行实时通知。到目前为止,我能够广播到公共频道,但坚持与私人频道。 我的bootstrap.js: 拉威尔回声服务器。json: 在我的notification类中,我将broadcastOn()设置为: 我的客户是: 在公共频道中一切正常,但在私有频道中,启动laravel-echo-server后,命令行显示以下内容
问题内容: 我是新手,我正在尝试创建一个简单的聊天服务器,客户端可以在其中向所有连接的客户端广播消息。 在我的服务器中,我有一个goroutine(无限循环),它接受连接,并且所有连接都由一个通道接收。 然后,我为每个连接的客户端启动一个处理程序(goroutine)。在处理程序内部,我尝试通过迭代通道来广播到所有连接。 但是,我无法广播,因为(我认为通过阅读文档)通道需要在迭代之前关闭。我不确定
我正在尝试使用专用通道验证laravel echo。每次我收到“无法验证到private-U详细信息。1”。“basket_details”这是通道名称,1是参数。 当我使用公共频道时,一切都很完美。因此,我认为auth部分存在一些问题。 这是我的错误日志 这是我的事件文件。 这是我的频道。php 这是我的js文件 这是我的BroadcastServiceProvider 这是我的laravel