没有收到推送消息

时间:2012-10-21 17:54:06

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

我使用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 developer tools'控制台中,我得到以下内容:

(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 页面上,它指示消息率 Connections 大于零,例如2个连接等。


编辑#3

我测试了Pusher的测试页面。 (http://test.pusher.com/1.12) 它完美连接,但“Say Hello”功能无效。这让我觉得它可能是我的浏览器设置。

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

1 个答案:

答案 0 :(得分:3)

确定问题所在的步骤:

宝石记录

enable logging时宝石提供了哪些信息?可能是您的凭据不正确。

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

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

从JavaScript客户端(浏览器)

连接到Pusher

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

Pusher Debug Console

Pusher debug console为您提供有关您在Pusher中的应用程序中发生的事情的信息。在这种情况下,它会告诉您消息是否到达Pusher。您可以通过查看应用程序来完成此操作。

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

我无法在代码上看到任何其他错误,但调试控制台可能会提供更多信息,我可以从那里更新我的答案。< / em>的

关于您的问题的一些其他信息:

看起来你正试图在这里绑定一个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事件 - 请注意推送器:前缀。
  3.   

    (x)未捕获的TypeError:无法调用方法&#39; bind&#39;未定义的电话:31

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

      

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

    这意味着连接存在问题。 Pusher JavaScript库将处理此问题并尝试重新连接。不幸的是,并不总是能够捕获这样的错误,Chrome会将它们记录到JavaScript控制台。这给人的印象是某些事物永远不会被破坏,而事实并非如此。

      

    我测试了Pusher的测试页面。 (http://test.pusher.com/1.12)它完美连接,但是#34; Say Hello&#34;功能什么都不做。这让我觉得它可能是我的浏览器设置。

         

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

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