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 在刷新页面之前不会看到数据(这是从 db 获取数据)。
  2. 如果我在 A 上输入数据,它不会发布给其他客户端。
  3. 如果我在 C 上输入数据到只有 C 和 B 订阅的频道,只有 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 回答