有人知道使用哪种语言或技术来开发Spotify桌面应用程序吗? 它稳定,美观,轻便。
答案 0 :(得分:46)
从这里开始:http://www.quora.com/What-is-the-technology-behind-the-Spotify-desktop-app
日期:2014-09-09
Andreify Blixt,5年期Spotify员工:
我们所有客户的核心都是C ++,但这个核心已经是Rasmus的核心 post得到浓缩,功能分成模块。如 Spotify可以在越来越多的平台上使用 获得更丰富的功能集,我们需要确保"核心"没有按'吨 成为"一点点的一切"。这意味着爆发 某些功能,如播放控制,进入自己独立的 模块。这些模块仍然是C ++,但是足够自包含 从理论上讲,他们的逻辑可以在其他方面实施 语言。我们将接口层称为这些模块" Cosmos",和 它的工作方式与HTTP不太相似。宇宙允许任何部分 客户端使用任意路径与模块通信 有效载荷,允许更灵活的架构。有些明显 好处是版本化接口(例如:GET sp:// player / v1 / main 返回播放器状态)和JSON用于传递数据。这是 对我们的桌面客户端的另一个变化很重要。
如今,我们的许多桌面用户界面实际上都在使用Chromium Embedded 框架(CEF),基本上意味着我们的观点是由 JavaScript,HTML和CSS。对于我们所有的功能团队而言 努力工作,而不必担心打破别人的观点, 每个视图都在他们自己的浏览器中进行沙盒化处理。 (我想你可以这么想 作为Chrome中的标签的视图,除了我们在一个显示多个 时间)。这带来了一个限制:共享数据 视图之间变得更加困难。这就是Cosmos的用武之地 真正简化了核心(C ++)和JavaScript之间的通信 land:JS客户端可以发出任意请求,如果有的话 绑定,该请求得到处理和响应。一个例子是 "消息"允许任何视图将JSON数据推送到任何视图的端点 正在倾听的其他观点(类似于HTML5中的window.postMessage, 除了这个也可以与C ++模块接口)。这也是如何 客户端中的所有播放按钮都知道是否正在播放曲目 不,或者它是否可以脱机使用(另一个Cosmos模块),或者 你是否已经为你的音乐保存了一首歌。
我们的技术堆栈的另一个重要变化是我们已经移动了 一些逻辑进一步"返回",进入视图聚合服务。那么我们在哪里 之前会在客户端做几乎所有逻辑,只使用 后端作为数据存储,我们现在在逻辑层中做更多的工作 在数据存储和客户端之间,非常暴露端点 类似于宇宙(事实上,你可以用完全相同的方式调用后端 你称之为Cosmos模块,因此在层之间移动并不麻烦。 原因有两个:一,它让我们扩展到更多 平台更快,因为实现的客户端逻辑更少 第二,它确实有助于我们保持客户行为更加一致 并且是最新的,因为客户更多"愚蠢"。减轻任何 可能来自这方面的放缓我们确保有 缓存所有数据的规则,以便客户端仍然保留数据 在本地,它不负责尽可能多的业务逻辑 曾经是。
答案 1 :(得分:34)
以下是他们使用的第三方组件列表(当然是在C ++之上):
答案 2 :(得分:22)
根据Spotify设计师的说法:
http://twitter.com/#!/tobiasahlin/status/96483609799692288
“其中一些是在C ++中,其中一些是在一种名为Spider的HTML-ish标记语言中” “它仅用于在Spotify中使用”
答案 3 :(得分:14)
Spotify现在使用Chromium Embedded Framework(CEF)在桌面应用程序中显示由HTML / CSS / JavaScript组成的Web界面。
答案 4 :(得分:4)
来自website:
Spotify主要使用Python和C ++构建
答案 5 :(得分:3)
鉴于它在Windows上运行,显然不是.NET(Process explorer告诉我),没有遵循AIR安装过程,我会说C ++使用跨平台库。
所有内容都编译成一个可执行文件,表明他们可以访问所有依赖项的源代码。
W.r.t to Techno ...我认为他们使用的是Hardhouse Electronica
答案 6 :(得分:0)
在这里查看第一个答案: https://www.quora.com/What-is-the-technology-stack-behind-the-Spotify-web-client
Spotify的前任技术负责人Andreas Blixt已经详细解答了这个问题。
我们有一个处理登录的PHP层(以及其他一些 服务器端逻辑)以及在不同域上提供应用程序(for 安全原因)。其余的都是JavaScript。
为了让JavaScript与后端进行通信,它通过以下方式实现 我们称之为"接入点" (AP),高度优化的C ++服务 它可以同时处理大量活动连接。这项服务是 负责将请求路由到正确的后端服务。这个 服务能够通过端口80和443运行来克服 防火墙限制。通过WebSocket完成通信(或 某些浏览器的Flash。)
要与特定的后端服务进行通信,我们会路由请求 通过AP使用我们自己的名为" Hermes"的运输工具。这是 基本上是一个URL方案,让AP知道在哪里发送 请求。有效负载编码为Protobuf。爱马仕有一个很好的缓存 系统(我们称之为" Mercury")将结果存储到IndexedDB中 支持它的浏览器(我们在桌面上有相同的系统 客户端,但改为在C ++中实现),以避免请求相同 数据两次。这对于重新请求的资源非常有用 很多,比如艺术家,专辑和曲目。
对于UI,我们编写了一个非常先进的应用程序框架 (称为" Stitch")允许开发每个视图 由不同的团队独立而不必担心 打破任何事情视图以沙盒形式运行,但可以 仍然依赖共享库来处理常见的事情 跟踪元数据等。在撰写本文时,我们有~35个独特的视图(或 应用)在网络播放器中。
视图通过我们称之为"桥接"来获取数据并执行操作。 (基本上是一个API)使用postMessage,所以我们不需要 重新初始化每个应用程序的所有常用代码。非常酷的事情 关于这一点,我之前提到过的很多~35个观点都可以 实际上也可以在桌面客户端内运行而无需修改的 当然,他们将使用钩子进入Chromium而不是postMessage 嵌入式框架,以及我们的C ++核心。
我们尝试尽可能多地使用HTML 5技术,但在某些方面 案件取决于Flash。我认为我们有一个非常酷的技术堆栈 我们的网络播放器一般。
答案 7 :(得分:-9)
前端是用FLEX编写的,检查mac或windows机器上的源代码。您将看到很多xml文件,它们都是flex文件格式。
当然,与服务器和平台集成的连接可能是用c ++本地编写的。但UI部分只是FLEX ......