什么是 hm:// 协议?

Posted

技术标签:

【中文标题】什么是 hm:// 协议?【英文标题】:What is the hm:// protocol? 【发布时间】:2017-08-06 18:28:33 【问题描述】:

我只是在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】:

hm 是简短的 hermes,一种在 Spotify 的服务器之间内部使用的协议。它基本上是 zeromq,带有一个带有一些已定义标头的 protobuf 信封。

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

在您找到的示例中,它变得更加复杂。它似乎是在 Spotify 网络播放器中找到的 javascript sn-p。浏览器中的 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

【讨论】:

以上是关于什么是 hm:// 协议?的主要内容,如果未能解决你的问题,请参考以下文章

ICMP协议是啥?

HTTP协议:协议头是啥东西?

什么是TCP/IP协议?

GNU协议指啥?

什么是TCP/ IP协议?

什么是nvme协议?