丶野生程序猿 2020-11-17 14:42 采纳率: 0%
浏览 135

laravel-echo-server前端JS收不到推送的消息

最近在做消息服务,用到 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()没在页面上看到输出

 

 

  • 写回答

1条回答 默认 最新

  • 憧憬blog 2023-03-15 00:10
    关注

    根据你提供的信息,可能是以下原因导致前端JS收不到推送消息:

    1. laravel-echo-server配置错误:请确保laravel-echo-server.json中的host和port与前端JS中的Echo.channel()中的地址一致。

    2. 鉴权失败:通过检查代码可以看出,broadcastOn()方法返回的是PrivateChannel,也就是需要鉴权才能订阅的频道。请确保你的鉴权方式正确,并且该用户能够通过鉴权订阅到频道。

    3. 监听事件名称不匹配:请确保前端JS中监听事件的名称与事件类中的broadcastAs()方法所指定的名称一致。

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体