How to setup Ratchet Websocket server on production for Symfony app


I am trying to setup a Ratchet Websocket server on my Symfony app for production environment.

Didn’t find any reliable documentation about the subject, I have several questions :

  1. According to I must define routes in .platform/routes.yaml for websocket, but I have actually no idea what values I should put there :
"https://{default}/ws":  # is that some default route ? Should I set it in my app router too ?
    type: upstream
    upstream: "ws-app:http" #what exactly is ws-app ? Should I have a separated app ?
        enabled: false

Knowing that locally the server works fine via ws://

  1. How to actually start the server in production ? Should I add something in my deploy scripts ?
    Should I use RabbitMQ or something similar ? Do I need a worker ?

Thanks for your help!

    type: upstream
    upstream: "ws-app:http"
        enabled: false

Let’s break this down.

  1. "https://{default}/ws":
    • https:// - since you don’t have a http:// route configured, http:// will automatically redirect to https://.
    • {default} tells to use your default domain assigned to the project. This is good to have in place, especially if you haven’t attached a domain yet. That said, you could type a static value such as
    • /ws - You’re telling that any request to /ws (https://{default}/ws) should be handled by this route definition. If you’re development environment was sending websocket requests to http://localhost/my/websocket, you should replace /ws with /my/websocket. Use the path that your app is configured to work with.
  2. type: upstream - normally you won’t mess with this. This just let’s know that we are going to direct this to the app that you have defined.
  3. upstream: "ws-app:http"
    • This works with type: upstream to let know which app you want to answer this request.
    • ws-app:http - the first part of this is what matters—the ws-app. In your or in your .platform/applications.yaml you will have defined an value like name: app or name: my-symfony-app. Whatever the value of name: is, that should be the first part of this value. In other words, if you use name: my-websocket-app, then in your routes.yaml you will use: upstream: "my-websocket-app:http

Once you have this route pointing to your websocket app, you will want to handle the next step, request buffering.