可以使用Rails的配置选项config.action_cable.allowed_request_origins来限制可以访问ActionCable服务器的域(例如:config.action_cable.allowed_request_origins = '*://example.com')。这个选项将控制请求的来源,以确保只有特定的请求才能访问ActionCable服务器。
另外,在Redis配置文件中(redis.conf)可以添加一些选项来优化Redis服务,例如禁用RDB持久化,这样就可以减少Redis服务器的负载。
以下是一个使用ActionCable和Redis的示例:
首先,确保Redis服务器正在运行并已正确配置。
然后,运行bundle以获取必要的gem:
# Gemfile
gem 'redis'
gem 'activerecord'
gem 'bcrypt'
gem 'rack-cors'
gem 'puma'
gem 'listen'
gem 'spring'
接下来,创建一个ActionCable通道:
# app/channels/chat_channel.rb
class ChatChannel < ApplicationCable::Channel
def subscribed
# stream_from "some_channel"
end
def unsubscribed
# Any cleanup needed when channel is unsubscribed
end
def speak(data)
ActionCable.server.broadcast 'chat_channel', message: data['message']
end
end
最后,更新config/application.rb,启用WebSocket支持:
# config/application.rb
config.web_socket_server_url = "ws://localhost:3000/cable"
config.action_cable.allowed_request_origins = ['http://localhost:3000', 'http://127.0.0.1:3000']
启动Rails服务器,在模板中添加ActionCable客户端:
// app/views/layouts/application.html.erb
<%= action_cable_meta_tag %>
...
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload', 'data-turbolinks-eval': 'false' %>
...