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