什么是 hm:// 协议?
What is the hm:// protocol?
我只是在 spotify 的源代码中查看了一下,发现了这行代码:
var ALBUM_URI = 'hm://album/v1/album-app/album/';
我想知道这个 hm://
协议是什么。不幸的是,我在 google.
上没有找到任何内容
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 服务器内部使用的一种协议。它基本上是带有 protobuf 信封的 zeromq,其中定义了一些 headers.
所以,有点像 HTTP 定义了 TCP 的动词和结构 on-top,Hermes 定义了 zeromq 的动词和结构 on-top。它用于 HTTP-like Request/Response 以及 Publish/Subscribe。例如,在您找到的示例中,客户端请求有关相册的数据并等待响应。另一个示例可能是客户端订阅有关播放列表的事件。一旦有人发布对播放列表的更改,客户端就会知道。
在您找到的示例中,它变得更加复杂。它似乎是在 Spotify 网络播放器中找到的 javascript 片段。 Javascript 在浏览器中当然不能使用这个协议,所以因为你在那里看到了 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
我只是在 spotify 的源代码中查看了一下,发现了这行代码:
var ALBUM_URI = 'hm://album/v1/album-app/album/';
我想知道这个 hm://
协议是什么。不幸的是,我在 google.
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 服务器内部使用的一种协议。它基本上是带有 protobuf 信封的 zeromq,其中定义了一些 headers.
所以,有点像 HTTP 定义了 TCP 的动词和结构 on-top,Hermes 定义了 zeromq 的动词和结构 on-top。它用于 HTTP-like Request/Response 以及 Publish/Subscribe。例如,在您找到的示例中,客户端请求有关相册的数据并等待响应。另一个示例可能是客户端订阅有关播放列表的事件。一旦有人发布对播放列表的更改,客户端就会知道。
在您找到的示例中,它变得更加复杂。它似乎是在 Spotify 网络播放器中找到的 javascript 片段。 Javascript 在浏览器中当然不能使用这个协议,所以因为你在那里看到了 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