O que é a pilha de tecnologia por trás do cliente Spotify web?
TL;DR: Muitas tecnologias JavaScript e HTML5, com um sprinkle de PHP e Flash.
Temos uma camada PHP que lida com o log in (e alguma outra lógica do lado do servidor), bem como servir aplicações em diferentes domínios (por razões de segurança). O resto é tudo JavaScript.
Para que o JavaScript comunique com o backend, ele o faz através do que chamamos de "access point" (AP), um serviço C++ altamente otimizado que pode lidar com muitas conexões ativas de uma só vez. Este serviço é responsável pelo encaminhamento de pedidos para o serviço back end correto. Este serviço é capaz de correr sobre as portas 80 e 443 para ultrapassar as restrições de firewall. A comunicação é feita através do WebSocket (ou Flash para alguns navegadores).
Para nos comunicarmos com serviços backend específicos, encaminhamos as solicitações através do AP usando nosso próprio transporte chamado "Hermes". Este é basicamente um esquema de URL que permite ao AP saber para onde enviar a solicitação. As cargas úteis são codificadas como Protobuf. Hermes tem um bom sistema de cache (o chamamos de "Mercury") que armazena resultados para o IndexedDB para navegadores que o suportam (temos o mesmo sistema no cliente desktop, mas em vez disso implementado em C++), para evitar solicitar os mesmos dados duas vezes. Isto é muito útil para recursos que são muito requisitados, como artistas, álbuns e faixas.
Para a UI nós escrevemos um framework de aplicação bastante avançado (chamado "Stitch") para permitir que cada visão seja desenvolvida independentemente por equipes diferentes sem ter que se preocupar em quebrar nada. As views são executadas em um sandboxed , mas ainda podem depender de bibliotecas compartilhadas para coisas comuns como carregamento de metadados de faixas, etc. A partir desta escrita temos ~35 visualizações únicas (ou aplicações) no web player.
Views obtêm dados e executam ações através do que chamamos de "bridge" (basicamente, uma API) usando postMessage, para que não precisemos reinicializar todo o código comum para cada aplicação. O mais legal sobre isso é que muitas dessas ~35 visualizações que mencionei antes também podem ser executadas dentro do cliente desktop sem modificações. Claro, ao invés de postMessage eles estarão usando um gancho no Chromium Embedded Framework, e nosso C++ core.
Tentamos usar tecnologias HTML 5 o máximo possível, mas em alguns casos dependemos do Flash. Eu acho que nós temos uma pilha de tecnologia muito legal para o nosso web player em geral.