Хотя ваше приложение должно прослушивать случайный порт, с точки зрения постороннего, вы всегда будете открывать соединение через порт 80 или 443.
У Heroku есть маршрутизатор , через который каждое соединение идет первым.
Всякий раз, когда запрос переходит к appname.herokuapp.com
или настроенному вами пользовательскому домену, он отправляется на этот маршрутизатор.
Маршрутизатор знает обо всех запущенных вами dyno (и порте, на котором работает приложение), и выберет один случайным образом для отправки соединения.