2

Railsアプリケーションにfayeを実装しています。パブリッシュ メソッドは、両方のブラウザーが同じコンピューター上にある場合に正しく機能します。別のコンピューターの別のブラウザーからアプリケーションにアクセスすると、クライアントからサーバーにのみ機能し、他のクライアントには公開されません。また、サーバー上のブラウザーに変更がある場合、発行イベントはクライアントにプッシュされません。
コントローラー公開コード:

def publish(channel, data)
    message = {
      :channel => channel,
      :data => data,
      :ext => {:faye_token => FAYE_OUTGOING_AUTH_TOKEN}
    }
    uri = URI.parse('http://localhost:9292/faye')
    Net::HTTP.post_form(uri, :message => message.to_json)
end

faye を実行するコマンド:

rackup faye.ru -s thin -E production -d

例:
A: サーバー、B: クライアント 1、C: クライアント 2

AB と C は同じネットワーク内の異なるコンピューターであり、すべて同じチャネルにサブスクライブしています。

  1. Bにデータを入力すると、Aにはデータが表示されますが、ページを更新するまでCにはデータが表示されません(データベースからデータを取得しています)。
  2. A でデータを入力すると、他のクライアントに公開されません。
  3. C と B のみがサブスクライブしているチャネルに C のデータを入力すると、C のみがデータを参照でき、B には公開されません。

A、B、および C が同じコンピューター上の異なるブラウザーである場合、上記のすべてのケースが機能します。

これを開発モードで実行し、WEBrick、Unicorn、Thin を試しました。

どんな助けでも大歓迎です。ありがとう。

4

2 に答える 2

2

この問題を解決するために、「localhost」のすべてのインスタンスを、Faye が実行されているサーバーのアドレスに置き換えました。これには、クライアントをチャネルにサブスクライブすることも含まれます。

それが役に立てば幸いです、乾杯!

于 2012-12-05T12:24:56.173 に答える
0

Hey Babak: 私も同じ種類の問題に直面しています。nodejs + express + faye を使用しています。したがって、各サブスクライブ、クライアントに ip_addr:port を追加する必要があります

var client = new Faye.Client('/faye',{
        endpoints:{
                 websocket:'http:ws.chat-yummyfoods.rhcloud.com'
              }
        ,timeout: 20
    });
client.disable('websocket');
console.log("client:"+client);
var subscription=client.subscribe('/channel', function(message) {
        console.log("Message:"+message.text);
        $('#messages').append('<p>'+message.text+'</p>');
    });
subscription.then(function(){
        console.log('subscribe is active');
        alert('subscribe is active');
    });
于 2014-05-14T07:56:26.743 に答える