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 appAdd 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 = 50051AnyCable 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
endBy 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.