- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我只是在 spotify 的源代码中四处看了看,发现了这行代码:
var ALBUM_URI = 'hm://album/v1/album-app/album/';
我想知道这个 hm://
协议(protocol)是什么。不幸的是,我没有在谷歌上找到任何东西。
A code-snippet Context taken FROM HERE :
var live = require('spotify-live');
var Cosmos = require('spotify-cosmos-api');
var ALBUM_URI = 'hm://album/v1/album-app/album/';
var formatData = require('../data_formatters');
/**
* Album model contains all album data
* @param {string} albumURI The Spotify uri for an album to create a model.
*/
function AlbumModel(albumURI) {
this.albumURI = albumURI;
this.album = live(albumURI);
}
AlbumModel.prototype.init = function(callback) {
this.callback = callback;
var requestURI = ALBUM_URI + this.albumURI + '/desktop';
Cosmos.resolver.get(requestURI, this.prepareData.bind(this));
};
AlbumModel.prototype.prepareData = function(error, data) {
if (error) {
var errorStatusCode = error.response ? error.response.getStatusCode() : 500;
var simplifiedStatusCode = 400;
if (400 <= errorStatusCode && errorStatusCode <= 410) {
simplifiedStatusCode = 400;
} else if (500 <= errorStatusCode && errorStatusCode <= 503) {
simplifiedStatusCode = 500;
}
this.callback(simplifiedStatusCode, {});
return;
}
var albumData = data.getJSONBody();
albumData = formatData(albumData);
if (!this.album.get('rows')) {
this.album.update(albumData);
}
this.callback(null, albumData);
};
module.exports = AlbumModel;
最佳答案
hm 是 hermes 的缩写,是 Spotify 服务器内部使用的一种协议(protocol)。它基本上是带有带有一些已定义 header 的 protobuf 信封的 zeromq。
所以,有点像 HTTP 在 TCP 之上定义动词和结构,Hermes 在 zeromq 之上定义动词和结构。它用于类似 HTTP 的请求/响应以及发布/订阅。例如,在您找到的示例中,客户端请求有关相册的数据并等待响应。另一个示例可能是客户端订阅有关播放列表的事件。一旦有人发布对播放列表的更改,客户端就会知道。
在您找到的示例中,它变得格外复杂。它似乎是在 Spotify 网络播放器中找到的 javascript 片段。浏览器中的 Javascript 当然不能使用这个协议(protocol),所以因为你在那里看到了 uri,这意味着某种隧道也在进行中。
从某种意义上说,它比HTTP能做的更多,但从另一种意义上说,由于用途有限,它要简单得多。它是多年前构建的,早于 HTTP/2 和 grpc。它仍然在 Spotify 中大量使用。
我找到了一篇更详细地提到爱马仕的论文和行业文章。
http://www.diva-portal.org/smash/get/diva2:706244/FULLTEXT01.pdf https://www.csc.kth.se/~gkreitz/spotifypubsub/spotifypubsub.pdf
关于javascript - 什么是hm ://protocol?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42819550/
我想基于 arduino 工具和库为我的 iPhone 构建智能 watch 。但是我对 BLE 有一个问题:我知道已经有一个用于 ancs 的 nRF8001 库( https://github.c
AFAIK,在 Hindley-Milner 类型系统中使用的统一可以通过在构造函数位置允许类型变量并在这种情况下放宽 arity 约束来推广以统一更高级的类型: f a ~ T a1 b1 f ~
给定这两个程序(用 JavaScript 编写)...... // comp :: (b -> c) -> (a -> b) -> (a -> c) const comp = f=> g=> x=>
我正在使用 HM-10 蓝牙与我的 iPhone 配对,但我注意到 HM-10 无法使用“设置”与 iPhone 配对。它只是不会出现在我的蓝牙列表中。我需要一个像“Lightblue”或“Bluec
我买了一些 HM-10 模块,通过 iOS 应用程序与 Arduino 对话。我尝试了这些示例并且它们有效,但在每个应用程序中你都必须选择要与之交谈的设备。我的计划是使用该模块控制 RGB-Light
我正在尝试使用 HEVC HM 引用代码来解码有损失的可扩展 HEVC 文件。但是,在没有损失的情况下,解码器似乎运行良好,但是当我尝试解码损坏的文件(在基本和/或增强数据包中遇到一些损失)时,解码器
我已经尝试了一切,真的,一切。HM-10 模块(蓝牙)有 LED 灯且会闪烁,如果您从他们的应用程序连接到它,LED 灯会停止闪烁,并且您会获得 UUID iDevice。 当您尝试从其 UART 对
我正在尝试了解 HM-10 的可能性,但对它的很多工作原理还很陌生。我只熟悉更高层次的东西。 我原本以为我会使用 hm-10 作为 iBeacon,但很快发现它的局限性。这是之前的原始计划: iBea
我成功地能够使用 didDiscoverServices 发现服务,从那里我调用以下函数来发现特征: peripheral.discoverCharacteristics(nil, for: serv
我需要将 HM-10 与 Arduino Uno 或 Nano 一起使用。我不知道如何发送 AT 命令和阅读回复。这些命令通过串行监视器工作,但不能通过代码工作。 这是我到目前为止尝试过的: #inc
我看到下一行出现奇怪的崩溃: java.lang.NoSuchMethodError: org.apache.commons.lang3.builder.EqualsBuilder.a 是的,我使用
我在嵌入式设备中使用 HM10 蓝牙 - UART 模块。我使用 iPhone 应用程序通过 UUID 连接到它,但我想在第一次连接时激活 PIN,这样并不是每个拥有 iPhone 和 LightBl
我有一个 Arduino Uno 连接到一个 HM-10 BLE 设备。我希望能够通过 Xamarin 表单应用程序与之通信。不幸的是,我意识到要这样做,有必要在 Arduino 上为 BLE 模块定
在调试 HM 16.2 的解码时,我看到 CU 看起来像是被分割为 PU。每个PU都有相同的MV。在一个 CU 中允许不同的 MV 是我(目前)知道将 CU 拆分为 PU 的唯一原因。 我想知道我是否
我正在尝试将数据从 iPhone 发送到 HM-10 我已经与蓝牙设备建立了连接,但我不知道如何发送数据,这是外设委托(delegate)函数吗? 按下按钮时,固定整数(1,2,3,4...)将被发送
我正在尝试将一些数据从 iOS 设备发送到连接到 arduino 的 HM-10 蓝牙 LE 模块。问题是连接到模块 discoverServices 后没有返回服务的特征。 func per
这个问题已经有答案了: What does <> mean for java generics? (2 个回答) 已关闭 7 年前。 我发现,从 java 1.5 或更高版本开始,您可以初始化 jav
如果我写bytebuddy代码 .defineProperty("hm",TypeDescription.Generic.Builder.parameterizedType(HashMap.class
背景 我构建了一个简单的电路,其中包括一个 Arduino Nano 和一个 HM-10 BLE 串行模块。 您可以在以下电气工程 SE 问题中看到该电路:https://electronics.st
我是一名优秀的程序员,十分优秀!