web-dev-qa-db-fra.com

Quelle langue ou technologie a été utilisée pour développer l'application de bureau Spotify?

Quelqu'un sait-il quel langage ou quelle technologie a été utilisé pour développer l'application de bureau Spotify?.

66
tom

De là: http://www.quora.com/What-is-the-technology-behind-the-Spotify-desktop-app
Date: 2014-09-09

Andreas Blixt, employé Spotify depuis 5 ans:

Le cœur de tous nos clients est le C++, mais depuis Rasmus's post got condensé, avec des fonctionnalités divisées en modules. Comme Spotify devient disponible sur de plus en plus de plates-formes ainsi que pour obtenir un ensemble de fonctionnalités plus riche, nous devons nous assurer que le "noyau" ne le fait pas devenir "un peu de tout". Cela a signifié sortir certaines fonctionnalités, telles que le contrôle de lecture, dans leurs propres .__ séparés. modules. Ces modules sont toujours en C++ mais sont suffisamment autonomes que leur logique pourrait théoriquement être mise en œuvre dans d'autres langues. Nous appelons la couche d’interface de ces modules "Cosmos", et cela fonctionne d'une manière pas très différente de HTTP. Cosmos laisse n'importe quelle partie du client communiquent avec un module en utilisant des chemins arbitraires et des charges utiles, ce qui permet une architecture beaucoup plus flexible. Certains évident les avantages sont les interfaces versionnées (exemple: GET sp: //player/v1/main renvoie l'état du lecteur) et JSON pour la transmission des données. C'est important pour un autre changement dans notre client de bureau.

Une grande partie de notre interface utilisateur de bureau utilise actuellement Chromium Embedded Framework (CEF), ce qui signifie fondamentalement que nos vues sont alimentées par JavaScript, HTML et CSS. Pour que toutes nos équipes techniques soient capables de travailler sur leurs traits sans crainte de briser la vue de quelqu'un d'autre, chaque vue est mise en sandbox dans son propre "navigateur" (je suppose que vous pouvez penser aux vues sous forme d'onglets dans Chrome, sauf que nous en affichons plus d'une à la fois). Cela implique cependant une restriction: le partage de données entre les vues devient plus difficile. C'est ici qu'intervient Cosmos et simplifie vraiment la communication entre le noyau (C++) et JavaScript land: les clients JS peuvent faire des requêtes arbitraires et s'il y a un contraignante, cette demande est traitée et traitée. Un exemple est le point de terminaison "messages" qui permet à n’importe quelle vue d’envoyer des données JSON à n’importe quel fichier autre vue à l’écoute (un peu comme window.postMessage en HTML5, sauf que celui-ci peut également s’interfacer avec des modules C++). C'est aussi comment tous les boutons de lecture du client savent si une piste est en cours de lecture ou si non, ou s'il est disponible hors connexion (un autre module Cosmos), ou si vous avez sauvegardé une chanson dans votre musique.

Un autre changement important dans notre pile technologique est que nous avons déménagé une certaine logique plus "retour", dans la vue des services d'agrégation. Alors, où nous ferait avant presque toute la logique dans les clients, en utilisant uniquement le backend en tant que magasin de données, nous travaillons maintenant beaucoup plus dans une couche logique entre les magasins de données et les clients, exposant les points de terminaison très semblable à Cosmos (en fait, vous pouvez appeler un serveur de la même manière vous appelez un module Cosmos, donc passer d'une couche à une autre n'est pas compliqué) ... .. La raison en est double: premièrement, cela nous permet d’agrandir davantage les plates-formes plus rapidement car il y a moins de logique client à implémenter et deuxièmement, cela nous aide vraiment à garder le comportement de nos clients plus cohérent et à jour parce que le client est plus "stupide". Pour atténuer tout ralentissement qui pourrait provenir de cela, nous nous sommes assurés qu'il y ait règles de mise en cache pour toutes les données, afin que le client conserve les données localement, il n’est tout simplement pas responsable de la logique commerciale autant que cela l'habitude d'être.

45
Daniel P

Voici la liste des composants tiers qu'ils utilisent (en plus du C++ bien sûr):

  • Renforcer
  • Expat
  • FastDelegate
  • giflib
  • libjpeg
  • libogg
  • libvorbis
  • Mersenne Twister
  • zlib
  • NSIS (Windows uniquement)
  • Bibliothèque de modèles Windows (Windows uniquement)
  • Growl (Max OS X uniquement)
  • MATrackingArea (Mac OS X uniquement)
34
Mahtar

Selon un designer de Spotify:

http://Twitter.com/#!/tobiasahlin/status/96483609799692288

"Une partie est en C++, et une autre dans un langage de balisage HTML appelé Spider" "Il est uniquement conçu pour être utilisé dans Spotify"

22
Brian Mathews

Spotify utilise maintenant le Chromium Embedded Framework (CEF) pour afficher une interface Web composée de HTML/CSS/JavaScript au sein de l’application de bureau.

13
Keavon

De leur site web :

Spotify est construit principalement en Python et C++

4
bhny

Etant donné qu'il fonctionne sous Windows, il est clair que non .NET (Process Explorer me dit cela), qu'il n'a pas suivi un processus d'installation AIR, je dirais que C++ utilise des bibliothèques multiplateformes.

Tout est compilé dans un seul exécutable, ce qui indique qu'ils ont accès à la source de toutes les dépendances.

W.r.t to Techno ... je pense qu'ils ont utilisé Hardhouse Electronica

3
CVertex

Vérifiez la première réponse ici: https://www.quora.com/What-is-the-technology-stack-behind-the-Spotify-web-client

Andreas Blixt, ancien responsable de la technologie chez Spotify, a répondu de manière détaillée.

Nous avons une couche PHP qui traite de la connexion (et d'une autre logique côté serveur ) Ainsi que du service des applications sur différents domaines (pour des raisons de sécurité). Le reste est tout JavaScript.

Pour que JavaScript puisse communiquer avec le backend, il le fait via Ce que nous appelons un "point d'accès" (AP), un service C++ hautement optimisé qui peut gérer beaucoup de connexions actives à la fois. Ce service est responsable de l'acheminement des demandes vers le bon service principal. Ce service est capable de fonctionner sur les ports 80 et 443 à surmonter restrictions de pare-feu. La communication s'effectue via WebSocket (ou Flash pour certains navigateurs).

Pour communiquer avec des services d’arrière-plan spécifiques, nous acheminons les demandes à travers l'AP en utilisant notre propre moyen de transport appelé "Hermes". C'est Fondamentalement, un schéma d'URL qui permet au PA de savoir où envoyer le demande. Les données utiles sont codées en tant que Protobuf. Hermes a une belle mise en cache système (nous l'appelons "Mercury") qui stocke les résultats à IndexedDB pour les navigateurs qui le prennent en charge (nous avons le même système sur le poste de travail client, mais implémenté à la place en C++), pour éviter de demander la même chose données deux fois. Ceci est très utile pour les ressources qui reçoivent une nouvelle demande beaucoup, tels que des artistes, des albums et des pistes.

Pour l'interface utilisateur, nous avons écrit un cadre d'application assez avancé (appelé "Stitch") pour permettre à chaque vue d'être développée indépendamment par différentes équipes sans avoir à s'inquiéter de rien casser. Les vues s’exécutent dans un bac à sable, mais peuvent dépendent toujours de bibliothèques partagées pour des choses courantes telles que le chargement suivre les métadonnées, etc. À ce jour, nous avons environ 35 vues uniques (ou applications ) sur le lecteur Web.

Les vues obtiennent des données et effectuent des actions via ce que nous appelons un "pont" (essentiellement, une API) utilisant postMessage, de sorte que nous n’avons pas besoin de réinitialiser tout le code commun pour chaque application. La chose vraiment cool à propos de cela est que beaucoup de ces ~ 35 points de vue que j'ai mentionnés précédemment peuvent en fait également fonctionner à l'intérieur du client de bureau sans modification. De Bien sûr, au lieu de postMessage, ils utiliseront un crochet pour Chromium Cadre intégré et notre noyau C++.

Nous essayons d’utiliser autant que possible les technologies HTML 5, mais dans certains cas les cas dépendent de Flash. Je pense que nous avons une pile technologique vraiment cool pour notre lecteur web en général.

0
Hossam Mourad