我遵循了一些关于使用 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 应用程序的 Controller 方法中调用它:
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 调试控制台中,即使我使用 Event Creator 发送它。但真正奇怪的是,在 Stats 页面上,它指示 Message Rate 和 Connections 大于零,例如2 连接等

编辑 #3

我已经测试过 Pusher 的测试页面。 (http://test.pusher.com/1.12)
它完美连接,但“Say Hello”功能没有任何作用。这让我想到这可能是我的浏览器设置。

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

最佳答案

确定问题所在的步骤:

gem 记录

当你 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,那么下一步是了解为什么该事件没有到达您的客户端。

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

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

看起来您正在尝试在此处绑定(bind)到 Pusher 事件:
myChannel.bind('subscription_error', function(status) {
  alert('Pusher subscription_error');
});

但这不会做任何事情,原因如下:
  • 该 channel 是公共(public) channel ,因此不会发生订阅错误
  • 事件名称不正确。如果它是一个私有(private)或在线 channel 并且它使用了 user authentication 机制,那么你可以绑定(bind)到 http://pusher.com/docs/client_api_guide/client_events#subscription_error 事件 - 注意 pusher: 前缀。



  • 此错误意味着您正在对 bind 变量调用 undefined 。这是一般的脚本错误。



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



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

    关于javascript - 未收到推送消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13000521/

    10-13 05:30