AnyCable-compatible Rack hijack based Ruby Web Socket server designed for development and testing purposes.
# Initialize server instance first.
ws_server = AnyCable::Rack::Server.new
app = Rack::Builder.new do
map "/cable" do
run ws_server
end
end
# NOTE: don't forget to call `start!` method
ws_server.start!
run app
Add gem "anycable-rack-server"
to you Gemfile
and make sure your Action Cable adapter is set to :any_cable
. That's it! We automatically start AnyCable Rack server for you at /cable
path.
AnyCable Rack Server uses anyway_config
gem for configuration; thus it is possible to set configuration parameters through environment vars (prefixed with ANYCABLE_
), config/anycable.yml
file or secrets.yml
when using Rails.
NOTE: AnyCable Rack Server uses the same config name (i.e., env prefix, YML file name, etc.) as AnyCable itself.
You can pass a config object as the option to AnyCable::Rack::Server.new
:
server = AnyCable::Server::Rack.new(config: AnyCable::Rack::Config.new(**params))
If no config is passed, a default, global, configuration would be used (AnyCable::Rack.config
).
When using Rails, config.anycable_rack
points to AnyCable::Rack.config
.
You can customize the headers being sent with each gRPC request.
Default headers: 'cookie', 'x-api-token'
.
Can be specified via configuration:
AnyCable::Rack.config.headers = ["cookie", "x-my-header"]
Or in Rails:
# <environment>.rb
config.any_cable_rack.headers = %w[cookie]
# Mount WebSocket server at the specified path
config.any_cable_rack.mount_path = "/cable"
# NOTE: here we specify only the port (we assume that a server is running locally)
config.any_cable_rack.rpc_port = 50051
AnyCable Rack supports Redis (default) and HTTP broadcast adapters (see the documentation).
Broadcast adapter is inherited from AnyCable configuration (so, you don't need to configure it twice).
AnyCable::Rack.config.broadast_adapter = :http
ws_server = AnyCable::Rack::Server
app = Rack::Builder.new do
map "/cable" do
run ws_server
end
map "/_anycable_rack_broadcast" do
run ws_server.broadcast
end
end
By default, we mount broadcasts endpoint at /_anycable_rack_broadcast
.
You can change this setting:
config.any_cable_rack.http_broadcast_path = "/_my_broadcast"
NOTE: Don't forget to configure http_broadcast_url
for AnyCable pointing to your web server and the specified broadcast path.
Run units with bundle exec rake
.
Bug reports and pull requests are welcome on GitHub at https://github.com/anycable/anycable-rack-server.
The gem is available as open source under the terms of the MIT License.