2012-11-29 25 views
1

我的rails應用程序中有faye實現。當兩個瀏覽器位於同一臺計算機上時,發佈方法正常工作。當我從另一臺計算機上的另一臺瀏覽器訪問應用程序時,它只能從客戶端到服務器進行工作,並且不會發布到其他客戶端。此外,當服務器上的瀏覽器發生更改時,發佈事件不會推送到客戶端。
控制器發佈的代碼:當在網絡中的另一臺計算機上使用瀏覽器時,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 

實施例:
一個:服務器, B:客戶端1, C:客戶機2

AB和C是不同的計算機在同一網絡中,並且都訂閱了相同的頻道。

  1. 如果B I輸入數據,A將看到數據但是C不會看到數據,直到我刷新頁面(這是從數據庫中獲取數據)。
  2. 如果我在A上輸入數據,它不會發布到其他客戶端。
  3. 如果C I的輸入數據,以僅C和B訂閱,是僅含有C得到看到的數據,並且它不發佈到B.

如果A,B,和信道C是同一臺計算機上的不同瀏覽器,所有上述情況都可以使用。

我已經在開發模式下運行了這個,並嘗試過WEBrick,Unicorn和Thin。

任何幫助,將不勝感激。 謝謝。

回答

1

要解決此問題,我將所有「localhost」實例替換爲運行Faye的服務器的地址。這也包括訂閱客戶到渠道。

希望它有幫助, 乾杯!

0

嘿Babak:我也面臨同樣的問題,我使用nodejs + express + faye。所以我要補充的ip_addr:端口到每個訂閱,客戶

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'); 
    }); 
+1

所以我用'URI = URI.parse(的「http://本地主機:9292 /菲」)'線與其它計算機上它是試圖訪問它自己的** localhost **,這與主要的faye地址不同。通過使它們指向我的服務器地址uri = URI.parse('http:// SERVER_IP:9292/faye')',問題就解決了。 –

+0

我也解決了這個問題 請通過這個http://stackoverflow.com/questions/23650534/faye-is-not-available-on-client-browser-for-node-js/23662899#23662899 – Pulkit

相關問題