我只是得到我的王菲和軌道託管在Heroku在過去一小時左右的時間內進行通信的應用程序...這裏是我的意見:
如果您使用的是env變量,請確保您的所有服務器上都設置了FAYE_TOKEN。
禁用websockets,你已經完成了... client.disable(...)
沒有爲我工作,我用Faye.Transport.WebSocket.isUsable = function(_,c) { c(false) }
來代替。
這可能適用於您,但是最難追查到我......在我的開發環境中,我的應用程序運行的端口將被添加到指定主機名的末尾我的faye服務器......但這似乎導致在生產中無法通信。我通過在application_controller.rb中創建一個broadcast_server_uri方法來解決這個問題,該方法在必要時處理包含端口的內容,然後在任何地方使用該函數啓動一個新頻道。
....
class ApplicationController < ActionController::Base
def broadcast_server
if request.port.to_i != 80
"http://my-faye-server.herokuapp.com:80/faye"
else
"http://my-faye-server.herokuapp.com/faye"
end
end
helper_method :broadcast_server
def broadcast_message(channel, data)
message = { :ext => {:auth_token => FAYE_TOKEN}, :channel => channel, :data => data}
uri = URI.parse(broadcast_server)
Net::HTTP.post_form(uri, :message => message.to_json)
end
end
而且在我的應用程序的JavaScript,包括
<script>
var broadcast_server = "<%= broadcast_server %>"
var faye;
$(function() {
faye = new Faye.Client(broadcast_server);
faye.setHeader('Access-Control-Allow-Origin', '*');
faye.connect();
Faye.Transport.WebSocket.isUsable = function(_,c) { c(false) }
// spin off your subscriptions here
});
</script>
FWIW,我不會強調有關設置訪問控制允許來源,因爲它似乎沒有任何區別 - 我看到XMLHttpRequest cannot load http://...
無論如何,但這應該仍然運作良好,讓你暢通無阻。 (雖然我很想學習更清潔的解決方案......)
嗨Soychicka,非常感謝這一點。我正在查看它。有一個問題,你是否修改了應用程序的ApplicationController或者爲faye服務器創建了一個? – 2012-08-07 23:01:37
嗯...仍然沒有工作。訂閱似乎沒有問題,但是當我發佈時,它並沒有被收錄。 faye.publish('/ channel',{data:「data」})命令確實向POST服務器發送POST消息,但似乎沒有迴應。有一個問題,當你發佈時,你的請求負載是這樣加密的:message =%5B%7B%22channel%22%3A%22%2Ffoo%22%2C%22data%22%3A%7B%22text%22%3A% 22Hi%20%22%7D%2C%22clientId%22%3A%22bqk8vbj7v6j10jqsoogrxr7cn%22%2C%22id%22%3A%221hj9hf41cgaa8m1x3nllu0zyzphv%22%7D%5D – 2012-08-07 23:50:17
你是如何在heroku上設置你的faye服務器的?你有沒有使用特定的github回購? – 2012-08-08 00:33:48