我使用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
我能错过什么?请帮忙!
我将这段代码添加到客户端:
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
每当我发送“消息”时,它甚至不会出现在Pusher Debug Console 中,即使我使用 Event Creator 发送它。但真正奇怪的是,在 Stats 页面上,它指示消息率和 Connections 大于零,例如2个连接等。
我测试了Pusher的测试页面。 (http://test.pusher.com/1.12) 它完美连接,但“Say Hello”功能无效。这让我觉得它可能是我的浏览器设置。
我目前在Win7 PC上运行最新版本的Chrome。
答案 0 :(得分:3)
确定问题所在的步骤:
enable logging时宝石提供了哪些信息?可能是您的凭据不正确。
虽然没有强制执行,但建议您将JSON发送给Pusher。因此,如果您按如下方式更新了trigger
调用,则gem会将对象转换为JSON:
Pusher['survey-channel'].trigger('data-changed', { :text => "Busy creating new Call" } )
Pusher connection FAQ提供有关可能遇到的问题的信息以及连接到Pusher时的常见解决方案。
Pusher debug console为您提供有关您在Pusher中的应用程序中发生的事情的信息。在这种情况下,它会告诉您消息是否到达Pusher。您可以通过查看应用程序来完成此操作。
如果它到达Pusher,那么下一步就是了解为什么事件没有到达您的客户。
我无法在代码上看到任何其他错误,但调试控制台可能会提供更多信息,我可以从那里更新我的答案。< / em>的
看起来你正试图在这里绑定一个Pusher事件:
myChannel.bind('subscription_error', function(status) {
alert('Pusher subscription_error');
});
但由于以下几个原因,这不会做任何事情:
(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)意味着防病毒软件无法篡改连接数据。