我正在尝试加入一个在线状态频道(公共频道工作得很好),但我无法让它工作:
Vue代码:
mounted(){
Echo.join('game.' + "0").here((users) => {
alert("In the channel!");
})
.joining((user) => {
console.log("Someone entered");
})
.leaving((user) => {
console.log(user.name);
})
.listen('GameEvent', (e) => {
console.log("Hey")
});
Echo.channel('NewSentence')
.listen('NewSentence',(sentence)=>{
alert("HOLA");
});
}
字符串
我正在尝试加入通道“game.0”。由于我使用Laravel Passport,我需要使用令牌进行身份验证,并且正在工作。发送Laravel Echo的auth请求返回一个密钥,但JavaScript事件未触发.here()
,.listening()
..
BroadcastService提供商 Boot 功能:
public function boot() {
Broadcast::routes(["middleware" => "auth:api"]);
require base_path('routes/channels.php');
}
型
channel.php
Broadcast::channel('game.0', function ($user,$id) {
return ['id' => $user->id];
});
型
验证路径:
Route::post('/broadcasting/auth', function(Request $request){
$pusher = new Pusher\Pusher(
env('PUSHER_APP_KEY'),
env('PUSHER_APP_SECRET'),
env('PUSHER_APP_ID'),
array(
'cluster' => env('PUSHER_APP_CLUSTER'),
'useTLS' => false,
'host' => '127.0.0.1',
'port' => 6001,
'scheme' => 'http',
)
);
return $pusher->socket_auth($request->request->get('channel_name'),$request->request->get('socket_id'));
});
型
我是否需要做一些额外的事情来使它工作?这是auth请求:
x1c 0d1x的数据
的
EDIT:GameEventevent:
class GameEvent implements ShouldBroadcastNow {
use Dispatchable, InteractsWithSockets, SerializesModels;
public $gameEvent;
public $gameId;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct($gameEvent, $gameId) {
//
$this->gameEvent = $gameEvent;
$this->gameId = $gameId;
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\PresenceChannel|array
*/
public function broadcastOn() {
//return new PrivateChannel('channel-name');
return new PresenceChannel('game.0');
}
public function broadcastWith() {
return $this->gameEvent;
}
}
型
编辑:
我把名字硬编码了:'game.0'现在被硬编码在routes/channels.php
路由中,在Echo连接中和GameEvent中。我还删除了broadcastAs()
。进入laravel-websockets调试 Jmeter 板后,我发现我想要订阅的频道甚至没有出现。它看起来不会启动连接,但我不知道它是怎么回事。
我把
2条答案
按热度按时间uajslkp61#
这里的问题似乎是Echo没有在正确的频道上收听。首先,Echo.join使用的是频道game.0,其中0是用户的id,我不认为实际上有一个id为0的用户。其次,你正在广播,
GameEvent
并且Echo正在连接到名为game的频道。{id}我建议您从事件文件中删除broadcastAs()函数或侦听GameEvent。还可以使用WebSocket Jmeter 板进行测试。 Jmeter 板将在
/laravel-websockets
自动路由,这只适用于本地环境,因此请确保该环境在您的. env中是本地的。
使用laravel-websockets提供的调试 Jmeter 板将数据发送到通道,首先在 Jmeter 板中连接到您的Web套接字,然后只需输入通道名称,事件名称和JSON格式的数据,并在 Jmeter 板上单击send。x1c 0d1x尝试找出这是否有助于解决您的问题。
我还建议彻底阅读laravel's official documentation on broadcasting以及laravel-websockets debugging dashboard guide。也更新你得到的结果,这个问题。
7kjnsjlb2#
当你使用
broadcastAs()
时,根据Laravel文档,你需要在Echo.join()
中的频道名称之前放一个.
字符串