【问题标题】:Pusher on route not sending event in Laravel路由上的推送器未在 Laravel 中发送事件
【发布时间】:2015-03-10 04:06:51
【问题描述】:

我正在使用Pusher 创建一个测试应用程序,以便在Laravel 4 上进行实时通知。 在我测试上述 API 时,我很难让它发挥作用。

我的routes.php上有这个:

Route::get('pusher-test', function(){
    return View::make('pages.test');
});
Route::any('test', function(){
        $pusher = new Pusher('key','sect','app_key'); //my keys are correct.
        $pusher->trigger('notificationChannel', 'userRegistration', []);
});

然后是我的pusherTest.js 文件:

(function(){
    var pusher = new Pusher('key');
    var channel = pusher.subscribe('notificationChannel');
        channel.bind('userRegistration', function(data){
            $('.test').append('HEY!');
        }); 
})();

我的查看页面:

<html>
    <head>
        <meta charset="utf-8">
        {{ HTML::style('_/css/bootstrap.css') }}
        {{ HTML::style('_/css/mystyle.css') }}
    </head>
    <body>
        <h2>HI!</h2>
        <div class="test"></div>
        {{ HTML::script('_/js/bootstrap.js') }}
        {{ HTML::script('_/js/jquery.js') }}
        {{ HTML::script('_/js/pusher/pusher.min.js')}}
        {{ HTML::script('_/js/pusherTest.js')}}
    </body>
</html>

当我尝试在 Pusher.com 上观察我的应用程序的 Debug Console 时, 这是我看到的:

但是当我点击test 路由时,它不会在我的 Pusher 应用程序上发送事件,也不会向我的客户端发送 API 消息。但是,如果我将在调试控制台上使用Create new Event 测试器,那么它肯定会发送 API 消息,而我的客户端会接收并更新它。

您认为发生了什么,为什么在我的路线上它无法将事件发送到我的推送应用程序?我无法弄清楚,因为它没有异常错误。请指教。

【问题讨论】:

    标签: laravel websocket push-notification real-time pusher


    【解决方案1】:

    对我来说这是因为我使用了 eu 服务器,而 laravel 是在我们服务器上自动配置的

    【讨论】:

    • 令人难以置信的是我花了很多时间在这上面,这就是答案!谢谢。要么深入研究 Laravel 的代码并将其切换到美国,要么将你的推送服务器设置在美国地区,然后你就可以开始了。
    • 这也对我有用。但是我在config/broadcasting.phppusher.options 的配置中添加了这个。
    【解决方案2】:

    要扩展@adutu 的答案,您需要设置

    'cluster' => 'eu'
    

    在 Pusher 驱动程序配置的“选项”部分中,在 broadcasting.php 中。

    【讨论】:

      【解决方案3】:

      您可以在三个点调试与 Pusher 的集成:

      1. 您与 Pusher 的 HTTP (REST) API 的交互
      2. 确保 Pusher 正在使用 Pusher 调试控制台接收事件
      3. 通过检查 pusher-js 日志记录确保您的客户端集成正常工作

      在您的情况下,您已经完成了 2. 并且您可以看到您触发的事件没有到达调试控制台。所以,你需要做 1。

      Pusher PHP 服务器库提供了如何启用调试的详细信息: https://github.com/pusher/pusher-php-server#debugging

      以及如何从库中获取日志信息: https://github.com/pusher/pusher-php-server#logging

      一旦你有了 pusher-php-server 库日志信息,请随时发布它,以便我们查看问题可能是什么。您是否收到非 2xx 响应代码?

      【讨论】:

      • 谢谢你。我将 die 和 dump 放入触发函数:dd($pusher-&gt;trigger('notificationChannel','userRegistration',['title'=&gt;'sample'], null, true)); 并返回:array(2) { ["body"]=&gt; string(112) "Timestamp expired: Given timestamp (2015-01-13T04:15:15Z) not within 600s of server time (2015-01-12T12:05:24Z) " ["status"]=&gt; int(401) } 与我的时区有关吗?
      • 谢谢。我发现了。这是我的时区的错。
      • 这对我来说也是服务器时间问题。运行sudo ntpdate time.nist.gov 解决了这个问题。
      【解决方案4】:

      这个问题是由于您无法为推送广播设置主机。

      只有在使用 EU 集群时才会出现此问题,在这种情况下,您应该将主机更改为:

      api-eu.pusher.com
      

      同样,您可以制作自定义广播驱动程序。它与默认的做同样的事情,但设置了主机参数。

      我将建议对照明广播管理器进行编辑,以使此更改更容易进行。

      【讨论】:

        猜你喜欢
        • 2018-11-07
        • 2021-11-03
        • 2021-06-02
        • 2020-03-26
        • 2017-01-26
        • 1970-01-01
        • 1970-01-01
        • 2017-05-01
        • 2017-12-23
        相关资源
        最近更新 更多