Description
AnyCable remplace ActionCable (le serveur WebSocket de Rails) par une implémentation Go scalable. Permet de gérer des dizaines de milliers de connexions concurrentes sur un seul serveur, avec pub/sub distribué (Redis, NATS, PostgreSQL). Utilisé en production par : JetBrains, Travelport, etc.
Différence avec un serveur de notification classique : AnyCable est une librairie serveur (pas une app à installer) — vous l'intégrez dans votre app Rails. Ce n'est pas le bon choix si vous cherchez un push simple : voyez plutôt Ntfy ou Gotify.
Pour qui : équipes Rails qui veulent scaler les WebSockets sans réécrire en Go/Node.
Installation
Gemfile
gem "anycable-rails", "~> 1.4"
Docker Compose (composants)
version: '3.8'
services:
anycable:
image: ghcr.io/anycable/anycable-go:latest
container_name: anycable
restart: unless-stopped
command: -p 8080 -r redis://redis:6379
ports:
- "8080:8080"
redis:
image: redis:7-alpine
container_name: anycable-redis
restart: unless-stopped
# Your Rails app exposing ActionCable
app:
build: .
environment:
- ANYCABLE_URL=ws://anycable:8080
- REDIS_URL=redis://redis:6379
Alternatives
Open Source
- ActionCable (Rails) — Built-in, mais limité
- Phoenix Channels (Elixir) — Excellente alternative
- [[app-ntfy]] — Pour push simple (pas WebSocket générique)
Propriétaires
- Pusher — SaaS WebSocket
- Ably — Real-time PaaS
- PubNub — Real-time messaging
Sécurité
- WSS obligatoire via reverse proxy.
- Auth via channels : AnyCable ne fait pas d'auth, votre app Rails le gère via
connection.rb. - Rate limiting : configurer côté Go (
--limits). - Idempotency : les broadcasts sont best-effort ; pour critiques, ajouter confirmation applicative.
