4

Rails アプリへのリアルタイム メッセージングに Pusher を使用する方法について、いくつかのチュートリアル (すべて非常によく似ています) に従いました。

私がしようとしていること:

// 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に表示されません。しかし、本当に奇妙なのは、[統計]ページで、メッセージ レート接続数が 0 より大きいことを示していることです (例: 2 つの接続など)。


編集 #3

Pusher のテスト ページをテストしました。(http://test.pusher.com/1.12) 完全に接続しますが、「Say Hello」機能は何もしません。これは、ブラウザの設定にあるのではないかと思います。

現在、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 接続 FAQでは、 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 イベントにバインドできます。プッシャー:プレフィックスに注意してください。

(x) Uncaught TypeError: 未定義の呼び出しのメソッド 'bind' を呼び出せません:31

bindこのエラーは、 である変数を呼び出していることを意味しますundefined。これは一般的なスクリプト エラーです。

(3) 接続が確立される前に WebSocket が閉じられます。:3000:1

これは、接続に問題があったことを意味します。Pusher JavaScript ライブラリがこれを処理し、再接続を試みます。残念ながら、このようなエラーを常にキャッチできるとは限らず、Chrome はエラーを JavaScript コンソールに記録します。これは、実際には壊れていないのに、何かが永久に壊れているような印象を与えます。

Pusher のテスト ページをテストしました。(http://test.pusher.com/1.12) 完全に接続しますが、「Say Hello」機能は何もしません。これは、ブラウザの設定にあるのではないかと思います。

現在、Win7 PC で最新バージョンの Chrome を実行しています。

http://test.pusher.com/1.12?ssl=trueを試すと、'hello' メッセージが表示される場合があります。WebSocket 接続を妨害するアンチウイルスがインストールされている可能性が非常に高いです。SSL (WSS) 経由で接続することは、ウイルス対策が接続データを改ざんできないことを意味します。

于 2012-10-22T05:08:47.423 に答える