AnyCable-compatible Rack hijack based Ruby Web Socket server designed for development and testing purposes.
Using with Rack
# 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
Usage with Rails
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 your at
AnyCable Rack Server uses
anyway_config gem for configuration; thus it is possible to set configuration parameters through environment vars (prefixed with
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
server = AnyCable::Server::Rack.new(config: AnyCable::Rack::Config.new(**params))
If no config is passed, a default, global, configuration would be used (
When using Rails,
config.anycable_rack points to
You can customize the headers being sent with each gRPC request.
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).
Using HTTP broadcast adapter
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
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.
Running RPC from the same process
The goal of the Rack server is to simplify the development/testing process. But we still have to run the RPC server.
This gem also provides a way to run RPC server within the same process.
All you need to do is set
run_rpc = true in the configuration:
# in Rack app AnyCable::Rack.config.run_rpc = true # and only after that ws_server.start! # in Rails config.any_cable_rack.run_rpc = true
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.