wake-up-neo.com

Welche Sprache oder Technologie wurde zur Entwicklung der Spotify-Desktopanwendung verwendet?

Weiß jemand, mit welcher Sprache oder Technologie die Spotify-Desktopanwendung entwickelt wurde? Es ist stabil, gut aussehend und leichtgewichtig.

66
tom

Von hier aus: http://www.quora.com/Was-is-the-technology-hind-the-Spotify-desktop-app
Datiert: 2014-09-09

Andreas Blixt, 5 Jahre Spotify-Mitarbeiter:

Der Kern aller unserer Kunden ist C++, aber dieser Kern besteht seit Rasmus Nach dem Zusammenfassen mit Funktionalität, die in Module aufgeteilt ist. Wie Spotify wird auf immer mehr Plattformen sowie .__ verfügbar. Um ein umfangreicheres Feature-Set zu erhalten, müssen wir sicherstellen, dass "Core" nicht funktioniert werde "ein bisschen von allem". Dies bedeutete den Ausbruch von bestimmte Funktionen, z. B. die Wiedergabesteuerung, in ihre eigenen separaten Module. Diese Module sind immer noch C++, sind jedoch in sich abgeschlossen. dass ihre Logik theoretisch in anderen implementiert werden könnte Sprachen. Wir nennen die Schnittstellenschicht für diese Module "Cosmos" und es funktioniert in einer Weise, die von HTTP nicht zu unähnlich ist. Kosmos lässt jeden Teil des Clients kommunizieren mit einem Modul über beliebige Pfade und Nutzlasten, die eine viel flexiblere Architektur ermöglichen. Einige offensichtlich Vorteile sind versionierte Schnittstellen (Beispiel: GET sp: //player/v1/main gibt den Player-Status zurück) und JSON zum Weiterleiten von Daten. Das ist wichtig für eine weitere Änderung in unserem Desktop-Client.

Viele unserer Desktop-Benutzeroberflächen verwenden derzeit Chromium Embedded Framework (CEF), was im Wesentlichen bedeutet, dass unsere Ansichten von .__ getragen werden. JavaScript, HTML und CSS. Für alle unsere Feature-Teams an ihren Gesichtszügen zu arbeiten, ohne Angst zu haben, die Sicht eines anderen zu zerstören. Jede Ansicht wird in einem eigenen "Browser" abgespeichert (ich denke, Sie können die Ansichten als Registerkarten in Chrome betrachten, außer wir zeigen mehr als eine zu einem Zeitpunkt.). Dies bringt jedoch eine Einschränkung mit sich: das Teilen von Daten Zwischen den Ansichten wird es schwieriger. Hier kommt Kosmos ins Spiel und vereinfacht die Kommunikation zwischen Core (C++) und JavaScript Land: Die JS-Clients können willkürliche Anfragen stellen und wenn es ein .__ ist. verbindlich wird diese Anfrage bearbeitet und beantwortet. Ein Beispiel ist der Endpunkt "messages", über den jede Ansicht JSON-Daten an beliebige .__ ausgeben kann. andere Ansicht, die zuhört (eine Art wie window.postMessage in HTML5, Außer diese kann auch mit C++ - Modulen verbunden werden). Dies ist auch wie Alle Play-Buttons im Client wissen, ob ein Track abgespielt wird oder nicht oder ob es offline verfügbar ist (ein anderes Cosmos-Modul) oder ob Sie ein Lied zu Ihrer Musik gespeichert haben.

Eine weitere wichtige Änderung an unserem Technologie-Stack ist, dass wir umgezogen sind einige logik weiter "zurück", in view aggregation services. Also wo wir würde vorher fast die gesamte Logik in den Clients tun, nur mit der Backend als Datenspeicher, arbeiten wir jetzt viel mehr in einer Logikschicht zwischen den Datenspeichern und den Clients, wodurch Endpunkte sehr sichtbar gemacht werden Ähnlich wie bei Cosmos (tatsächlich können Sie ein Backend auf die gleiche Weise aufrufen Sie rufen ein Cosmos-Modul auf, so dass das Wechseln zwischen Ebenen kein Aufwand ist) . Der Grund dafür ist zweierlei: Erstens können wir uns auf weitere .__ erweitern. Plattformen schneller, da weniger Client-Logik implementiert werden muss Und zweitens hilft es uns wirklich, unser Kundenverhalten konsistenter zu halten und aktuell, weil der Client "dumm" ist. Um jeden zu entschärfen Verlangsamung, die daraus resultieren könnte, haben wir sichergestellt, dass es Cacheregeln für alle Daten, so dass der Client die Daten weiterhin behält. lokal ist es einfach nicht für so viel Geschäftslogik verantwortlich wie es war früher.

45
Daniel P

Hier ist die Liste der Komponenten von Drittanbietern, die sie verwenden (natürlich zusätzlich zu C++):

  • Boost
  • Expat
  • FastDelegate
  • giflib
  • libjpeg
  • libogg
  • libvorbis
  • Mersenne Twister
  • zlib
  • NSIS (nur Windows)
  • Windows-Vorlagenbibliothek (nur Windows)
  • Growl (nur Max OS X)
  • MATrackingArea (nur Mac OS X)
34
Mahtar

Laut einem Spotify-Designer:

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

"Einige davon sind in C++ und einige in einer HTML-ish-Auszeichnungssprache mit dem Namen Spider" "Sie wurde nur für die Verwendung in Spotify erstellt."

22
Brian Mathews

Spotify verwendet nun das Chromium Embedded Framework (CEF), um eine Weboberfläche aus HTML/CSS/JavaScript in der Desktopanwendung anzuzeigen.

13
Keavon

Von ihrer Website :

Spotify wird hauptsächlich in Python und C++ erstellt

4
bhny

Da es unter Windows läuft, eindeutig nicht unter .NET (Process Explorer sagt mir das), folgte kein AIR-Installationsprozess. Ich würde sagen, dass C++ Cross-Platform-Bibliotheken verwendet.

Alles wird in einer ausführbaren Datei zusammengefasst, was darauf hinweist, dass sie auf die Quelle aller Abhängigkeiten zugreifen konnten.

Was für ein Techno ... ich glaube, sie haben Hardhouse Electronica benutzt

3
CVertex

Überprüfen Sie die erste Antwort hier: https://www.quora.com/Was-is-the-technology-stack-behind-the-Spotify-web-client

Andreas Blixt, ehemaliger Technology Lead bei Spotify, hat darauf ausführlich geantwortet.

Wir haben eine PHP - Schicht, die sich mit dem Anmelden (und einigen anderen Serverseitigen Logik) sowie dem Bereitstellen von Apps auf verschiedenen Domänen (aus Sicherheitsgründen ) Befasst. Der Rest ist alles JavaScript.

Damit das JavaScript mit dem Backend kommunizieren kann, geschieht dies über was wir als "Zugangspunkt" (AP) bezeichnen, ein hochoptimierter C++ - Dienst die viele aktive Verbindungen gleichzeitig verarbeiten kann. Dieser Dienst ist verantwortlich für das Weiterleiten von Anforderungen an den richtigen Backend-Service. Diese Der Dienst kann über die Ports 80 und 443 laufen, um .__ zu überwinden. Firewall-Einschränkungen. Die Kommunikation erfolgt über WebSocket (oder Flash für einige Browser).

Um mit bestimmten Backend-Diensten zu kommunizieren, leiten wir die Anforderungen weiter durch den AP mit unserem eigenen Transport namens "Hermes". Das ist Im Grunde ein URL-Schema, mit dem der AP weiß, wohin er die .__ senden soll. anfordern. Nutzlasten werden als Protobuf codiert. Hermes hat eine schöne Zwischenspeicherung System (wir nennen es "Mercury"), das Ergebnisse für .__ in IndexedDB speichert. Browser, die dies unterstützen (wir haben dasselbe System auf dem Desktop Client, aber stattdessen in C++ implementiert), um zu vermeiden, dass dasselbe Daten zweimal. Dies ist sehr nützlich für Ressourcen, für die ein .__ angefordert wird. viel, wie Künstler, Alben und Titel.

Für die Benutzeroberfläche haben wir ein ziemlich fortgeschrittenes Anwendungs-Framework geschrieben. (genannt "Stich"), damit jede Ansicht entwickelt werden kann unabhängig von verschiedenen Teams, ohne sich Sorgen machen zu müssen brechen etwas Die Ansichten werden in einer Sandbox ausgeführt, können jedoch Für allgemeine Dinge wie das Laden von .__ sind noch gemeinsame Bibliotheken erforderlich. Metadaten verfolgen usw. Zum Zeitpunkt des Schreibens haben wir ~ 35 einzigartige Ansichten (oder Apps) im Web Player.

Ansichten erhalten Daten und führen Aktionen über eine so genannte "Brücke" aus (grundsätzlich eine API) mit postMessage, so dass wir nicht .__ brauchen. Den gesamten Code für jede App neu initialisieren. Die wirklich coole Sache dazu ist, dass viele der ~ 35 Ansichten, die ich zuvor erwähnt habe, eigentlich auch ohne Änderung im Desktop-Client laufen. Von Anstelle von postMessage verwenden sie natürlich einen Haken in Chromium Embedded Framework und unser C++ - Kern.

Wir versuchen, HTML 5-Technologien so weit wie möglich zu verwenden, jedoch in einigen Fälle hängen von Flash ab. Ich denke, wir haben einen wirklich coolen Tech-Stack für unser web player im allgemeinen.

0
Hossam Mourad