使用什么语言或技术来开发Spotify桌面应用程序?

69 desktop-application spotify

有谁知道使用哪种语言或技术来开发Spotify桌面应用程序?它稳定,美观,轻便.

Dan*_*l P 48

从这里:http
://www.quora.com/What-is-the-technology-behind-the-Spotify-desktop-app日期:2014-09-09

5年Spotify员工Andreas Blixt:

我们所有客户的核心都是C++,但是自从Rasmus的帖子得到了浓缩以来,这个核心功能被分解为模块.随着Spotify在越来越多的平台上可用以及获得更丰富的功能集,我们需要确保"核心"不会变成"一点点".这意味着将某些功能(例如播放控制)分解到各自的模块中.这些模块仍然是C++,但是足够自包含,理论上它们的逻辑可以用其他语言实现.我们将接口层称为这些模块"Cosmos",它的工作方式与HTTP不同.Cosmos允许客户端的任何部分使用任意路径和有效负载与模块通信,从而允许更灵活的架构.一些明显的好处是版本化接口(例如:GET sp:// player/v1/main返回播放器状态)和JSON用于传递数据.这对于我们的桌面客户端的另一个更改很重要.

现在很多桌面用户界面实际上都在使用Chromium Embedded Framework(CEF),这基本上意味着我们的视图由JavaScript,HTML和CSS提供支持.为了让我们所有的功能团队能够处理他们的功能而不必担心破坏别人的视图,每个视图都在他们自己的"浏览器"中进行沙盒化(我猜你可以将视图视为Chrome中的标签,除了我们显示更多而不是一次一个).这带来了一个限制:在视图之间共享数据变得更加困难.这就是Cosmos的用武之地,它真正简化了核心(C++)和JavaScript之间的通信:JS客户端可以发出任意请求,如果有绑定,则会处理并响应该请求.一个例子是"消息"端点,它允许任何视图将JSON数据推送到正在侦听的任何其他视图(类似于HTML5中的window.postMessage,除了这个也可以与C++模块接口).这也是客户端中所有播放按钮知道曲目是否正在播放,或者是否可以离线播放(另一个Cosmos模块),或者是否已将歌曲保存到音乐中的方式.

我们的技术堆栈的另一个重要变化是我们将一些逻辑进一步"回"到视图聚合服务中.因此,我们之前在客户端执行几乎所有逻辑操作,只使用后端作为数据存储,我们现在在数据存储和客户端之间的逻辑层中做更多的工作,暴露端点与Cosmos非常相似(事实上,您可以像调用Cosmos模块一样调用后端,因此在层之间移动并不麻烦.其原因有两方面:一,它可以让我们更快地扩展到更多平台,因为实现的客户端逻辑较少,两个,它确实有助于我们保持客户端行为更加一致和最新,因为客户端是更"愚蠢".为了减轻可能由此产生的任何减速,我们确保所有数据都有缓存规则,以便客户端仍然可以在本地保存数据,它不像过去那样负责业务逻辑.

  • 哦,伙计,听起来像是React + Redux的完美案例 (5认同)

Mah*_*tar 35

以下是他们使用的第三方组件列表(当然是在C++之上):

  • 促进
  • 外籍人士
  • FastDelegate
  • giflib
  • 的libjpeg
  • libogg
  • libvorbis
  • Mersenne Twister
  • zlib的
  • NSIS(仅限Windows)
  • Windows模板库(仅限Windows)
  • 低吼(仅限Max OS X)
  • MATrackingArea(仅适用于Mac OS X)

  • 打开Spotify并转到"帮助">"显示许可证" (6认同)
  • @Rafael“他们使用基于本地元素的自己的 GUI 元素”---> 你能进一步解释一下这个说法吗?我不明白这是什么意思。您如何开发自己的 GUI 元素?我只使用过用于 GUI 编程的库;我一直想知道人们最初是如何创建库的。 (2认同)

小智 22

根据Spotify设计师的说法:

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

"其中一些是用C++编写的,其中一些是用于称为Spider的HTML-ish标记语言""它仅用于在Spotify中使用"

  • "Spider"是Spotify内部开发的. (8认同)
  • 在git hub找到了这个:https://github.com/krikelin/Spider有人似乎已经反向设计了蜘蛛布局引擎(从阅读spotify二进制文件?!?) (5认同)

Kea*_*von 14

Spotify现在使用Chromium Embedded Framework(CEF)在桌面应用程序中显示由HTML/CSS/JavaScript组成的Web界面.


小智 7

这个答案更新了,来自他们的工程博客:https://engineering.atspotify.com/2021/04/07/building-the-future-of-our-desktop-apps/

\n
\n

Spotify 桌面客户端是 Windows 和 Mac 本机应用程序,它使用 CEF(Chromium 嵌入式框架)来显示基于 Web 的用户界面。\xe2\x80\x99s 今天仍然如此,但对于以前版本的 Desktop,客户端中的每个 \xe2\x80\x9cpage\xe2\x80\x9d 都是作为独立的 \xe2\x80\x9capp\xe2\x80 构建的\x9d 在其自己的 iframe 内运行。

\n
\n

然而,他们最近不得不更新其架构,因为他们希望将使用 React 和桌面客户端构建的Web 播放器集成在一起,以便单个团队可以为两个客户端开发和发布功能。

\n
\n

最终的架构看起来像一层平台 API,向客户端公开底层 Spotify 生态系统,并具有基于 React 的用户界面和通过 React Hooks 公开的平台 API。因此,新的 UI 可以在 Web 上运行,也可以在我们的桌面容器中运行,并且永远不会知道或关心数据是否来自我们的 C++ 堆栈或 Web 基础设施。

\n
\n

架构图

\n


CVe*_*tex 3

鉴于它在 Windows 上运行,显然不是 .NET(进程资源管理器告诉我这一点),没有遵循 AIR 安装过程,我想说的是使用跨平台库的 C++。

所有内容都被编译成一个可执行文件,这表明他们可以访问所有依赖项的源。

对于 Techno 来说……我认为他们使用了 Hardhouse Electronica