Heroku Websocket到自定义域

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Heroku Websocket到自定义域相关的知识,希望对你有一定的参考价值。

我在Heroku上使用ActionCable和Rails。

当我在example.herokuapp.com时,聊天工作完美,但它在我的自定义域(example.com)上中断,因为我没有从Web套接字的主机发出cookie(wss://example.heroku.com/cable )。

有没有办法在Heroku上指向wss://example.herokuapp.com/cable to wss://example.com/cable?

或者,您会解释如何使用cloudflare的websocket功能解决此问题吗?

非常感谢。

答案

在使用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'
})

我希望这会有所帮助

以上是关于Heroku Websocket到自定义域的主要内容,如果未能解决你的问题,请参考以下文章

导致资产预编译在heroku部署上失败的代码片段

ios - Heroku 和 MongoDb 上的自定义解析服务器错误 3080:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项

Websocket 在 localhost 但不是 Heroku

Flask-SocketIO - WebSocket 在连接建立之前关闭。 [Heroku]

Websocket 不能在 heroku 中使用 socket.io

Heroku:Rails 5 WebSocket 连接失败