我正在尝试加入一个在线频道(公共频道运行良好),但我无法使它正常工作
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的身份验证请求会返回一个密钥,但是JavaScript事件未触发.here()
,.listening()
...。
BroadcastService提供程序启动功能:
public function boot() {
Broadcast::routes(["middleware" => "auth:api"]);
require base_path('routes/channels.php');
}
channels.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'));
});
我需要做一些额外的事情才能使其正常工作吗?这是身份验证请求:
编辑: GameEvent 事件:
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调试仪表板后,我发现我要订阅的频道甚至没有出现。看来它不会启动连接,但是我不知道它是怎么回事。
我对
进行了硬编码答案 0 :(得分:0)
这里的问题似乎是回声未在正确的频道上收听。首先,Echo.join使用的是channel game.0,其中0是用户的ID,我不认为实际上有一个ID为0的用户。其次,您正在广播
GameEvent
并且Echo正在连接到名为游戏的频道。{id} 。我建议您从事件文件中删除 broadcastAs()函数或在上收听GameEvent 。还可以使用websocket仪表板对此进行测试。仪表板将位于
/ laravel-websockets
自动路由,仅适用于本地环境,因此请确保环境在您的.env中是本地的。
使用laravel-websockets提供的调试仪表板将数据发送到通道,首先连接到仪表板内的Web套接字,然后只需以JSON格式输入通道名称,事件名称和数据,然后在仪表板上点击send。 尝试找出是否有助于解决您的问题。
我还建议您全面阅读laravel's official documentation on broadcasting和laravel-websockets debugging dashboard guide。 同时更新您对这个问题得出的结果。