不,它不可能开箱即用,因为您只能在 Rails 中配置一台服务器。
在config/environments/development.rb 文件(或其他任何环境)中,您只有一个action_cable 配置点:
# Mount Action Cable outside main process or domain
config.action_cable.mount_path = nil
config.action_cable.url = 'wss://example.com/cable'
config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ]
同样在你的布局文件中你只能有一个action_cable_meta_tag:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
...
<%= action_cable_meta_tag %>
</head>
<body>
...
</body>
</html>
为了拥有许多有线服务器,您必须能够像在 Hash 中那样配置其中的许多服务器:
# Mount Action Cable outside main process or domain
config.action_cable = [
{
mount_path: nil
url: 'wss://example.com/cable'
allowed_request_origins: [ 'http://example.com', /http:\/\/example.*/ ]
},
{
mount_path: nil
url: 'wss://example.com/cable2'
allowed_request_origins: [ 'http://example.com', /http:\/\/example.*/ ]
}
]
并且可以使用action_cable_meta_tags(注意复数版本)助手来设置它们。
但是
但是 Rails 允许您以独立模式运行您的服务器,这就是我们在我公司所做的。
所以我们使用 puma/unicorn 运行有线服务器,然后我们没有使用 action_cable_meta_tag 标签,但我们强制将 URL 指向 ActionCable.createConsumer:
const cable = ActionCable.createConsumer('wss://cable1.domain.co/cable')
const channel = cable.subscriptions.create(...)
知道了这一点,您可以在许多主机或端口上运行许多有线服务器,然后为每个服务器创建许多 ActionCable.createConsumer 实例。
这样你就有很多有线电视服务器了。
我希望这可以帮助任何想要运行多个有线服务器的人。