什么是hm://协议?

时间:2017-03-15 19:59:21

标签: javascript protocols spotify

我只是在spotify的源代码中看了一下,发现了这行代码:

var ALBUM_URI = 'hm://album/v1/album-app/album/';

我想知道这个hm://协议是什么。不幸的是,我没有在谷歌上找到任何东西。

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;

1 个答案:

答案 0 :(得分:2)

hm是简短的hermes,是Spotify服务器内部使用的协议。它基本上是带有protobuf包络的zeromq,带有一些定义的标题。

因此,有点像HTTP定义动词和TCP上的结构,Hermes在zeromq上定义动词和结构。它用于类似HTTP的请求/响应以及发布/订阅。例如,在您找到的示例中,客户端请求有关相册的数据并等待响应。另一个示例可以是订阅关于播放列表的事件的客户端。当有人发布对播放列表的更改时,客户就会知道。

在您找到的示例中,它变得格外复杂。它似乎是Spotify网络播放器中的一个JavaScript代码段。浏览器中的Javascript当然不能说这个协议,所以因为你看到了那里的uri,这意味着还有某种隧道传输。

从某种意义上说,它可以做的不仅仅是HTTP,但从另一个意义上说,由于使用有限,它更简单。它是在很多年前构建的,在HTTP / 2和grpc之前。它仍然在Spotify中大量使用。

我发现了一篇论文工作和一篇更详细地提到了hermes的行业文章。

http://www.diva-portal.org/smash/get/diva2:706244/FULLTEXT01.pdf https://www.csc.kth.se/~gkreitz/spotifypubsub/spotifypubsub.pdf