2017-03-15 142 views
0

我剛剛查了一下週圍的Spotify的源代碼,發現這行代碼:什麼是hm://協議?

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; 

回答

2

HM是短Hermes的,在Spotify的服務器之間在內部使用的協議。它基本上是一個帶有一些定義的標題的protobuf信封的zeromq。

所以,有點像HTTP定義了動詞和TCP上的結構,Hermes定義了動詞和zeromq頂部的結構。它用於類似HTTP的請求/響應以及發佈/訂閱。例如,在您找到的示例中,客戶端請求關於相冊的數據並等待響應。另一個例子可能是客戶訂閱關於播放列表的事件。當某人向播放列表發佈更改時,客戶就會知道。

在您找到的示例中它會變得更加複雜。它似乎是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