Ruby on rails 3.1 在网络中的另一台计算机上使用浏览器时,Faye不会发布

Ruby on rails 3.1 在网络中的另一台计算机上使用浏览器时,Faye不会发布,ruby-on-rails-3.1,localhost,faye,Ruby On Rails 3.1,Localhost,Faye,我的rails应用程序中有faye实现。当两个浏览器位于同一台计算机上时,发布方法可以正常工作。当我从另一台计算机上的另一个浏览器访问应用程序时,它只在客户端到服务器之间工作,不会发布到其他客户端。此外,当服务器上的浏览器发生更改时,发布事件不会推送到客户端。 控制器发布代码: def publish(channel, data) message = { :channel => channel, :data => data, :ext =&

我的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
rackup faye.ru -s thin -E production -d
运行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
rackup faye.ru -s thin -E production -d
示例:
A:服务器, B:客户1, C:客户2

A B和C是同一网络中的不同计算机,它们都订阅了同一通道

  • 如果我在B上输入数据,A将看到数据,但C在我刷新页面(从db获取数据)之前不会看到数据
  • 如果我在上输入数据,它不会发布到其他客户端
  • 如果我在C上输入数据到一个只有C和B订阅的通道,只有C可以看到数据,它不会发布到B
  • 如果A、B和C是同一台计算机上的不同浏览器,则上述所有情况都适用

    我已经在开发模式下运行了它,并尝试了WEBrick、Unicorn和Thin

    任何帮助都将不胜感激。
    谢谢。

    为了解决这个问题,我用Faye运行的服务器的地址替换了“localhost”的所有实例。这也包括为客户端订阅频道

    希望有帮助,
    干杯

    嘿,巴巴克:我也面临着同样的问题,我使用的是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');
        });
    
    var client=new Faye.client(“/Faye”{
    端点:{
    websocket:'http:ws.chat yummyfoods.rhcloud.com'
    }
    ,超时时间:20
    });
    client.disable('websocket');
    console.log(“客户端:+客户端”);
    var subscription=client.subscribe('/channel',函数(消息){
    console.log(“Message:+Message.text”);
    $(“#messages”).append(“”+message.text+”

    ”); }); subscription.then(函数(){ log('subscribe is active'); 警报(“订阅处于活动状态”); });
    所以我使用了
    uri=uri.parse('http://localhost:9292/faye“)
    line,在另一台计算机上,它试图访问自己的本地主机,该主机与faye主地址不同。通过让它们指向我的服务器地址
    uri=uri.parse('http://SERVER_IP:9292/faye“)
    问题已经解决。我也解决了问题,请检查一下