Какой язык или технология использовались для разработки настольного приложения Spotify? - PullRequest
67 голосов
/ 19 марта 2009

Кто-нибудь знает, какой язык или технологию использовали для разработки настольного приложения Spotify? Он стабильный, красивый и легкий.

Ответы [ 8 ]

46 голосов
/ 04 ноября 2014

Отсюда: http://www.quora.com/What-is-the-technology-behind-the-Spotify-desktop-app
Дата: 2014-09-09

Андреас Бликст, 5-летний сотрудник Spotify:

Ядром всех наших клиентов является C ++, но это ядро ​​существует с тех пор, как Расмус сообщение стало сжатым, с функциональностью, разделенной на модули. Как Spotify становится доступным на все большем количестве платформ, а также Получая более богатый набор функций, мы должны убедиться, что «ядро» не стать "немного всего". Это означало вспыхнуть определенные функции, такие как управление воспроизведением, в свои отдельные модули. Эти модули по-прежнему C ++, но достаточно автономны что их логика теоретически может быть реализована в другом языки. Мы называем интерфейсный слой к этим модулям "Космос", и он работает не слишком отличающимся от HTTP. Космос позволяет любую часть клиента общаться с модулем, используя произвольные пути и полезные нагрузки, что позволяет гораздо более гибкую архитектуру. Некоторые очевидные Преимуществами являются версионные интерфейсы (пример: GET sp: // player / v1 / main возвращает состояние игрока) и JSON для передачи данных. Это важно для другого изменения в нашем настольном клиенте.

В наши дни большинство наших настольных интерфейсов используют Chromium Embedded. Framework (CEF), что в основном означает, что наши взгляды основаны на JavaScript, HTML и CSS. Для всех наших игровых команд, чтобы иметь возможность работать над своими чертами, не боясь нарушить чужое мнение, каждый вид изолирован в своем «браузере» (думаю, вы можете подумать представлений в виде вкладок в Chrome, за исключением того, что мы показываем более одного время). Это влечет за собой одно ограничение: обмен данными между взглядами становится все сложнее. Это где Космос приходит и действительно упрощает связь между ядром (C ++) и JavaScript земля: клиенты JS могут делать произвольные запросы и, если есть обязательный, этот запрос обрабатывается и отвечает. Одним из примеров является конечная точка «messages», которая позволяет любому представлению передавать данные JSON в любой другой вид, который слушает (вроде как window.postMessage в HTML5, кроме этого можно также взаимодействовать с модулями C ++). Это также как все кнопки воспроизведения на клиенте знают, воспроизводится ли дорожка или нет, или доступен ли он в автономном режиме (другой модуль Cosmos), или сохранили ли вы песню в своей музыке.

Еще одно важное изменение в нашем технологическом стеке - это то, что мы переехали некоторая логика далее «назад», в силу агрегации сервисов. Итак, где мы прежде чем делать почти всю логику в клиентах, только используя Бэкэнд как хранилище данных, теперь мы делаем гораздо больше работы на логическом уровне между хранилищами данных и клиентами, выставляя конечные точки очень похож на Космос (на самом деле, вы можете назвать бэкэнд точно так же, как Вы называете модуль Космос, так что перемещение между слоями не является проблемой. Причина этого двоякая: во-первых, она позволяет нам расширяться до более платформы быстрее, потому что меньше клиентской логики для реализации и во-вторых, это действительно помогает нам поддерживать постоянное поведение наших клиентов и современный, потому что клиент более "глупый". Чтобы смягчить любой замедление, которое может возникнуть из-за этого, мы убедились, что есть правила кэширования для всех данных, так что клиент все равно будет хранить данные на местном уровне, он просто не отвечает за столько бизнес-логики, сколько Раньше.

34 голосов
/ 31 марта 2009

Вот список сторонних компонентов, которые они используют (конечно, поверх C ++):

  • Повышение
  • Expat
  • FastDelegate
  • giflib
  • libjpeg
  • libogg
  • libvorbis
  • Мерсенн Твистер
  • Zlib
  • NSIS (только для Windows)
  • Библиотека шаблонов Windows (только для Windows)
  • рычание (только Max OS X)
  • MATrackingArea (только Mac OS X)
22 голосов
/ 25 августа 2011

По словам дизайнера Spotify:

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

«Часть из них написана на C ++, а другая на языке разметки HTML, называемой Spider» «Он построен исключительно для использования в Spotify»

14 голосов
/ 05 июня 2014

Spotify теперь использует Chromium Embedded Framework (CEF) для отображения веб-интерфейса, состоящего из HTML / CSS / JavaScript, в настольном приложении.

4 голосов
/ 23 июля 2011

со своего сайта :

Spotify построен в основном на Python и C ++

3 голосов
/ 19 марта 2009

Учитывая, что он работает в Windows, явно не в .NET (Об этом говорит проводник процессов), не следовал процессу установки AIR, я бы сказал, C ++, используя кроссплатформенные библиотеки.

Все скомпилировано в один исполняемый файл, который указывает, что у них был доступ к источнику всех зависимостей.

W.r.t к Техно ... я думаю, что они использовали Hardhouse Electronica

0 голосов
/ 27 марта 2018

Проверьте первый ответ здесь: https://www.quora.com/What-is-the-technology-stack-behind-the-Spotify-web-client

Андреас Бликст, бывший технический лидер в Spotify, подробно ответил на него.

У нас есть слой PHP, который занимается входом в систему (и некоторыми другими серверная логика), а также обслуживать приложения в разных доменах (для причины безопасности). Все остальное - JavaScript.

Чтобы JavaScript взаимодействовал с бэкендом, он делает это через то, что мы называем «точкой доступа» (AP), высоко оптимизированный сервис C ++ который может обрабатывать много активных соединений одновременно. Эта услуга отвечает за маршрутизацию запросов к правильному бэкэнд-сервису. это служба способна работать через порты 80 и 443, чтобы преодолеть ограничения брандмауэра. Связь осуществляется через WebSocket (или Flash для некоторых браузеров).

Для связи с конкретными бэкэнд-сервисами мы направляем запросы через точку доступа с помощью нашего собственного транспорта под названием "Гермес". Это в основном схема URL, которая позволяет AP знать, куда отправить запрос. Полезные данные кодируются как Protobuf. Гермес имеет хорошее кэширование система (мы называем это «Меркурий»), которая сохраняет результаты в IndexedDB для браузеры, которые его поддерживают (у нас такая же система на рабочем столе клиент, но вместо этого реализован в C ++), чтобы избежать запроса того же данные дважды. Это очень полезно для ресурсов, которые повторно запрашиваются много, таких как исполнители, альбомы и треки.

Для пользовательского интерфейса мы написали довольно продвинутую прикладную среду (называется «Стежок») для разрешения разработки каждого вида независимо друг от друга различными командами, не беспокоясь о ломать что-либо. Виды бегут в песочнице, но могут все еще зависит от общих библиотек для общих вещей, таких как загрузка отслеживать метаданные и т. д. На момент написания этой статьи у нас было ~ 35 уникальных представлений (или приложения) в веб-плеере.

Представления получают данные и выполняют действия через то, что мы называем "мостом" (в основном, API) с использованием postMessage, так что нам не нужно переинициализировать весь общий код для каждого приложения. Действительно классная вещь об этом, что многие из ~ 35 просмотров, которые я упоминал ранее, могут на самом деле также работает внутри настольного клиента без изменений. из конечно, вместо postMessage они будут использовать хук в Chromium Embedded Framework и наше ядро ​​C ++.

Мы стараемся максимально использовать технологии HTML 5, но в некоторых случаи зависят от Flash. Я думаю, у нас есть действительно крутой технический стек для наш веб-плеер в целом.

0 голосов
/ 12 октября 2010

Интерфейс написан на FLEX, ознакомьтесь с исходными кодами на вашем компьютере Mac или Windows. Вы увидите много xml-файлов в формате flex-файла.

Конечно, соединение с сервером и интеграцией платформы, вероятно, написано изначально на c ++. Но часть пользовательского интерфейса просто FLEX ...

...