As an alternative, predating Portmap by around 700 RFCs: tcpmux[0]. Everything connects to port 1 and asks for services by name.
However, it sort of requires your service to be started by inetd. It doesn't work for services that want to manage their own listen queues.
It also complicates firewalls. It makes it much harder to have rules that vary per service.