2016-12-05 99 views
6

我在Heroku上使用ActionCable和Rails。Heroku Websocket到自定义域

当我在example.herokuapp.com时,聊天功能完美,但是由于我没有从网络套接字的主机发出cookie(wss://example.heroku),所以它在我的自定义域(example.com)的.com /电缆)。

有没有什么办法可以指向 wss://example.herokuapp.com/cable到 wss://example.com/cable在Heroku上?

或者,你会解释如何使用cloudflare的websocket功能来解决这个问题吗?

非常感谢。

+0

你找到一个解决的办法?我遇到了同样的问题 – gwalshington

回答

0

在使用websocket进行工作时,我非常喜欢与pusher一起工作。他们很简单地设置。 它们都是免费的200K消息/天

这是heroku documentation对于推杆

1)安装宝石

gem install pusher 

2)安装插件

heroku addons:create pusher:sandbox 

3)设置您的初始化程序

#config/initializers/pusher.rb 
require 'pusher' 

Pusher.app_id = '000000' 
Pusher.key = '000000000000000000' 
Pusher.secret = '00000000000000000000' 
Pusher.cluster = 'xxx' 
Pusher.logger = Rails.logger 
Pusher.encrypted = true 

一旦你有你的地方键所有你需要的是在服务器上是真正创建一个客户端(JS)和服务器

在客户端的代码是这样的

<!DOCTYPE html> 
<head> 
    <title>Pusher Test</title> 
    <script src="https://js.pusher.com/4.1/pusher.min.js"></script> 
    <script> 

    // Enable pusher logging - don't include this in production 
    Pusher.logToConsole = true; 

    var pusher = new Pusher("#{key}", { 
     cluster: "#{cluster}", 
     encrypted: true 
    }); 

    var channel = pusher.subscribe('my-channel'); 
    channel.bind('my-event', function(data) { 
     alert(data.message); 
    }); 
    </script> 
</head> 

现在简单

require 'pusher' 

pusher_client = Pusher::Client.new(
    app_id: ENV[:app_id], 
    key: ENV[:key], 
    secret: ENV[:secret], 
    cluster: ENV[:cluster], 
    encrypted: true 
) 

pusher_client.trigger('my-channel', 'my-event', { 
    message: 'hello world' 
}) 

我希望这有助于出