在过去一个小时左右的时间里,我刚刚在 heroku 上托管了我的 faye 和 rails 应用程序……这是我的观察结果:
如果您使用环境变量,请确保您的所有服务器上都设置了 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,我不会强调设置 Access-Control-Allow-Origin ,因为它似乎没有任何区别 - 我看到XMLHttpRequest cannot load http://...
无论如何,但这应该仍然可以很好地让你畅通无阻。(虽然我很想学习更清洁的解决方案......)