4

我遵循了一些关于使用 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

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


编辑#3

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

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

4

1 回答 1

4

确定问题所在的步骤:

宝石测井

当您启用日志记录时,gem 会提供哪些信息?可能是您的凭据不正确。

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

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

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

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

Pusher 调试控制台

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

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

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

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

看起来您正在尝试在此处绑定到 Pusher 事件:

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

但这不会做任何事情有几个原因:

  1. 该频道是公共频道,因此不会发生订阅错误
  2. 事件名称不正确。如果它是私有或在线通道并且它使用用户身份验证机制,那么您可以绑定到 http://pusher.com/docs/client_api_guide/client_events#subscription_error 事件 - 请注意pusher:前缀。

(x) 未捕获的类型错误:无法调用未定义调用的方法“绑定”:31

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

(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) 连接意味着防病毒软件无法篡改连接数据。

于 2012-10-22T05:08:47.423 回答