Pusher:在 App\Events\Event 的 testChannel 上没有回调

Posted

技术标签:

【中文标题】Pusher:在 App\\Events\\Event 的 testChannel 上没有回调【英文标题】:Pusher : No callbacks on testChannel for App\Events\EventPusher:在 App\Events\Event 的 testChannel 上没有回调 【发布时间】:2018-12-20 13:18:46 【问题描述】:

我构建了一个 Laravel 广播,计划将其实现为实时聊天应用程序。检查客户端页面时,控制台日志显示:

Pusher:事件记录: "event":"App\\Events\\Event","data":"message":"Greetings from PrinceLuo!","channel":"testChannel"

Pusher : 在 App\Events\Event 的 testChannel 上没有回调

它只是忽略了确实存在的回调函数......

顺便说一句,我还没有安装 npm,所以我使用的是 Pusher 仪表板建议的简单 javascript 代码,而不是 Laravel 建议的 Vue 代码。

在控制台日志和 Pusher 仪表板上我都可以看到服务器发送的广播消息。

这是我的客户端代码:

<!DOCTYPE html>
<html>
    <!DOCTYPE html>
<head>
  <title>Pusher Test</title>

  <script src=" asset('js/pusher.min.js') "></script>
  <script>

    // Enable pusher logging - don't include this in production
    Pusher.logToConsole = true;

    var pusher = new Pusher('****************', 
      cluster: 'ap1',
      encrypted: true
    );

    var channel = pusher.subscribe('testChannel');
    channel.bind('App\Events\Event', function(data) 
  console.log(data);
);


  </script>
</head>
<body>
  <h1>Pusher Test</h1>
  <p>
    Try publishing an event to channel <code>testChannel</code>
    with event name <code>Event</code>.
  </p>
</body>
</html>

只需隐藏按钮即可~~

我搜索了一些类似的案例。但是没有人能给我答案。 有人遇到过这个案例或者对这个案例有什么想法吗?


更新:

我还将我的服务器端代码发布在这里以供任何需要的人使用:

<?php

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class Event implements ShouldBroadcast

    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $message;
    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct($message)
    
        //
        $this->message = $message;
    

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    
//        return new PrivateChannel('channel-name');
//        return new PrivateChannel('testChannel');
        return new \Illuminate\Broadcasting\Channel('testChannel');
    

这是我的路线:

Route::get('test_event',function()
    event(new Event('Greetings from PrinceLuo!'));
);

Route::get('test_listen',function()
    return view('listenBroadcast');
);

【问题讨论】:

你能分享一下你发布事件的服务器代码吗? @Will Sewell 当然,请检查更新的问题。 看起来不错...如果您是我们bind_global 会发生什么?我担心活动名称可能不正确。 事件 App\Events\Event 是由数据触发的 [object Object] pusher.min.js:8 Pusher : 在 App\Events\Event 的 testChannel 上没有回调这就是它所显示的全部。还是不行 其实,我和我的一位同事合作,在安卓应用上测试这个推送。并且android应用程序正确接收并分解了消息。 javascript 出了什么问题? 【参考方案1】:

对于那些对此案例感兴趣的人,我发布了我为解决这个问题所做的工作:

注意Push Logger显示【App\Events\Event】是为了逃避反斜杠的作用。所以在 JavaScript 中,我们必须同样改变它:

channel.bind('App\\Events\\Event', function(data));

简单但必不可少。

【讨论】:

【参考方案2】:

这就是我所做的

channel.bind('pusher:subscription_succeeded', function(members) 
    // alert('successfully subscribed!');
 );

 channel.bind("App\\Events\\NewComment", function(data) 
     console.log(data);
 );

【讨论】:

以上是关于Pusher:在 App\Events\Event 的 testChannel 上没有回调的主要内容,如果未能解决你的问题,请参考以下文章

Pusher 订阅和取消订阅过程

Java Server Pusher Chat:需要在Java服务器和android上进行Pusher一对一聊天的架构[关闭]

如何使用 PHP 绑定到 Pusher / Websocket 通道?

如何在 pusher 的帮助下使用 websocket 从数据库中获取数据?

Pusher 在 IOS 发布模式下停止处理事件

Pusher App 事件未触发