我遵循了一些关于使用 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');
});
但这不会做任何事情,原因如下:
此错误意味着您正在对
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/