最近在做消息服务,用到 laravel-echo-server,前面都还顺利,就是到最后前端的页面收不到消息 ,哪位大佬用到过,帮忙看看。
1. socket频道已经连通
2. redis的消息队列中已经有了PUSH出来的消息
3. listener中已经有打印在 php artisan queue:listen --tries=1 中有输出:
下面是代码:
1. event:
<?php
namespace App\Events;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Sentinel;
/**
* Class GrabOrderOneKey
* @package App\Events
*/
class GrabOrderOneKeyEvent implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $userBuyerId;
public $broadcastQueue = 'grab_order_one_key';
/**
* Create a new event instance.
*
* @param $buyerId
*/
public function __construct($buyerId)
{
$this->userBuyerId = $buyerId;
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn() {
return new PrivateChannel('grab_order_one_key');
}
public function broadcastWith(){
return [
'userBuyerId' => $this->userBuyerId,
];
}
public function broadcastAs()
{
return 'OneKeyEvent';
}
}
2. listener:
<?php
namespace App\Listeners;
use Illuminate\Contracts\Queue\ShouldQueue;
/**
* 一键抢单处理
* Class GrabOrderOneKeyHandle
* @package App\Listeners
*/
class GrabOrderOneKeyListener implements ShouldQueue
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct(){
//
}
/**
* Handle the event.
*
* @param object $event
* @return void
*/
public function handle($event)
{
//
var_dump($event);
}
}
3. 前端JS:
<script type="text/javascript">
Echo.channel('grab_order_one_key')
.listen('.OneKeyEvent', (e) => {
console.log('我嚓了');
});
</script>
4. laravel-echo-server.json:
{
"authHost": "http://localhost",
"authEndpoint": "/broadcasting/auth",
"clients": [],
"database": "redis",
"databaseConfig": {
"redis": {},
"sqlite": {
"databasePath": "/database/laravel-echo-server.sqlite"
}
},
"devMode": true,
"host": "0.0.0.0",
"port": "6001",
"protocol": "http",
"socketio": {},
"secureOptions": 67108864,
"sslCertPath": "",
"sslKeyPath": "",
"sslCertChainPath": "",
"sslPassphrase": "",
"subscribers": {
"http": true,
"redis": true
},
"apiOriginAllow": {
"allowCors": false,
"allowOrigin": "",
"allowMethods": "",
"allowHeaders": ""
}
}
5. channels.php:
<?php
/*
|--------------------------------------------------------------------------
| Broadcast Channels
|--------------------------------------------------------------------------
|
| Here you may register all of the event broadcasting channels that your
| application supports. The given channel authorization callbacks are
| used to check if an authenticated user can listen to the channel.
|
*/
Broadcast::channel('App.User.{id}', function ($user, $id) {
return (int)$user->id === (int)$id;
});
/**
* 新的消息通知
*/
Broadcast::channel('new-cash-event', function () {
return true;
});
Broadcast::channel('grab_order_one_key', function ($buyerId) {
return true;
});
问题:前端JS中的console.log()没在页面上看到输出