【问题标题】:Pusher messages not received未收到推送消息
【发布时间】:2023-03-28 13:20:01
【问题描述】:

我遵循了一些关于使用 Pusher 向我的 Rails 应用程序发送实时消息的教程(看起来都非常相似)。

我正在尝试什么:

// Javascript on my clientside receiving html page
$(function(){
  var pusher = new Pusher('xxxx-mykey-xxxx');
  var myChannel = pusher.subscribe('survey-channel');

  myChannel.bind('data-changed', function(data){ 
           alert(data);
      });
  // Some useful debug msgs
  pusher.connection.bind('connecting', function() {
      alert('Connecting to Pusher...');
    });
    pusher.connection.bind('connected', function() {
      alert('Connected to Pusher!');
    });
    pusher.connection.bind('failed', function() {
      alert('Connection to Pusher failed :(');
    });
    myChannel.bind('subscription_error', function(status) {
      alert('Pusher subscription_error');
    });
});

我在我的 Rails 应用程序的控制器方法中调用它:

Pusher['survey-channel'].trigger('data-changed', "Busy creating new Call") 
render :text => "Pusher sent"

当方法被调用时什么都不会发生,除了它呈现“Pusher sent”。

在我的 chrome 开发者工具控制台中,我得到以下信息:

(x) Uncaught TypeError: Cannot call method 'bind' of undefined calls:31
(3) WebSocket is closed before the connection is established. :3000:1

我会错过什么?请帮忙!


编辑#1

我将这段代码添加到客户端:

Pusher.log = function(message) {
  if (window.console && window.console.log) window.console.log(message);
};

它在控制台中记录了以下内容:

Pusher : Connecting : ws://ws.pusherapp.com:80/app/e5d0f1ae2cab03dc3aa9?client=js&version=1.8.6 calls:44    
Pusher : Event recd (event,data) : pusher:connection_established : {"socket_id":"14299.674628"} calls:44    
Pusher : Event sent (channel,event,data) :  : pusher:subscribe : {"channel":"survey-channel"} calls:44

编辑#2

每当我发送“消息”时,它甚至不会出现在 Pusher Debug Console 中,即使我使用 Event Creator 发送它也是如此。但真正奇怪的是,在 Stats 页面上,它表明 Message RateConnections 大于零,例如2 个连接等。


编辑#3

我已经测试了 Pusher 的测试页面。 (http://test.pusher.com/1.12) 它完美连接,但“打个招呼”功能无济于事。这让我想到这可能是我的浏览器设置。

我目前在 Win7 PC 上运行最新版本的 Chrome。

【问题讨论】:

  • 您是否正在使用一些 Web 开发代理?我观察到当我使用Charles 时,推送消息不会到达(Chrome/OSX)。
  • @YanivAknin 不,我不知道。我通过使用加密:true 在 javascript 中初始化我的 Pusher 实例来解决我的问题。 var pusher = new Pusher('mykey', { encrypted: true });

标签: javascript ruby-on-rails-3 pusher


【解决方案1】:

确定问题所在的步骤:

宝石记录

当您enable logging 时,gem 会提供哪些信息?可能是您的凭据不正确。

虽然没有强制执行,但建议您将 JSON 发送到 Pusher。因此,如果您按如下方式更新了 trigger 调用,gem 会将对象转换为 JSON:

Pusher['survey-channel'].trigger('data-changed', { :text => "Busy creating new Call" } )

从 JavaScript 客户端(浏览器)连接到 Pusher

Pusher connection FAQ 提供有关连接到 Pusher 时可能遇到的问题和常见解决方案的信息。

Pusher 调试控制台

Pusher debug console 为您提供有关在 Pusher 中的应用程序中发生的事情的信息。在这种情况下,它会通知您消息是否到达 Pusher。您可以通过查看您的应用程序来做到这一点。

如果它到达了 Pusher,那么下一步就是了解为什么事件没有到达您的客户。

我在代码上看不到任何其他错误,但调试控制台可能会提供更多信息,我将能够从那里更新我的答案。

关于您的问题的一些附加信息:

您似乎正在尝试在此处绑定 Pusher 事件:

myChannel.bind('subscription_error', function(status) {
  alert('Pusher subscription_error');
});

但这不会做任何事情,原因如下:

  1. 频道是公共频道,不会出现订阅错误
  2. 事件名称不正确。如果它是私人或在线频道并且它使用user authentication 机制,那么您可以绑定到 http://pusher.com/docs/client_api_guide/client_events#subscription_error 事件 - 请注意 pusher:前缀。

(x) Uncaught TypeError: Cannot call method 'bind' of undefined calls:31

此错误表示您正在对 undefined 的变量调用 bind。这是一般的脚本错误。

(3) WebSocket 在连接建立之前关闭。 :3000:1

这意味着连接出现问题。 Pusher JavaScript 库将处理此问题并尝试为您重新连接。不幸的是,并不总是可以捕捉到这样的错误,Chrome 会将它们记录到 JavaScript 控制台。这给人的印象是某些东西已永久损坏,而实际上并非如此。

我已经测试了 Pusher 的测试页面。 (http://test.pusher.com/1.12) 连接完美,但“打个招呼”功能无济于事。这让我想到这可能是我的浏览器设置。

我目前在 Win7 PC 上运行最新版本的 Chrome。

如果您尝试http://test.pusher.com/1.12?ssl=true,您可能会收到“你好”消息。您很可能安装了干扰 WebSocket 连接的防病毒软件。通过 SSL (WSS) 连接意味着防病毒软件无法篡改连接数据。

【讨论】:

  • 我尝试了 Pusher 的调试控制台,但没有出现任何内容,尽管在统计数据中它实际上显示了“消息”和“连接”。我也尝试过他们的事件创建器,但是通过它发送消息并没有出现在调试控制台中。
  • 谢谢。值得更新您的问题以澄清这一点。
  • 很快就会开始您的调试步骤。
  • 我添加了一个“从 JavaScript 客户端连接到 Pusher”。如果您想快速了解正在发生的事情,那么我建议您前往pusher-diagnostics.herokuapp.com 并发送 Pusher 支持结果。
  • 我已经在我的 iphone 上进行了 3G 测试,它工作正常。 (我的应用程序和测试 1.12)这意味着问题必须与我的 PC 所在网络上的套接字有关。或者可能是防火墙等。下一个测试将是看它是我的电脑还是整个网络。
猜你喜欢
  • 2012-10-27
  • 2014-12-16
  • 1970-01-01
  • 1970-01-01
  • 2020-07-16
  • 2016-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多