0

我创建了一个 API,它返回关于我的服务器上的一首歌曲的数据,包括流 URL。当客户端调用 API 时,它将获取数据,并开始在其播放器中流式传输歌曲。

但是现在我有多个客户端调用 API,返回有关播放列表中他们最近没有听过的随机歌曲的数据的最佳方式是什么?有几千首歌曲并且还在扩展。

所以我的问题是以下是否是一个好方法:

这是我打算做的事情。为每个客户端设置会话,在初始请求中,我获取所有歌曲,生成一个随机列表,将其与会话 ID 一起保存在缓存中,然后在每个后续请求中,我检查他们的会话 ID,然后抓取返回下一首歌曲数据?

至于确保不播放最近播放的歌曲,我将在数据库中记录之前听过的50首歌曲的历史,并进行歌曲ID比较,如果匹配则获取下一首歌曲?

这会是一种可行的方法吗?

4

2 回答 2

0

已编辑:获取有关服务器的更多信息。

在用户的收听历史中存储 X 数量的歌曲(缓冲区,大小 X)。实现一个请求随机歌曲的函数。当客户需要一首新的随机歌曲时:

  1. 从您的数据库中选择一首随机歌曲
  2. 将歌曲 ID 推送到收听历史缓冲区。
  3. 将数据返回给客户端

如果您打算将用户数据存储在服务器上,则实际上无需维护随机生成的歌曲列表。

否则,你就很准了。使用会话来识别用户。

于 2013-01-12T00:29:51.153 回答
0

假设您使用的是 mysql 之类的数据库,或者任何与歌曲相关联和 ID 的数据库,您可以生成一个随机数并使用它从数据库中选择一首随机歌曲。任何基于 ID 的数据存储都适用于此,并且可以很好地扩展。

如果您知道您的最高歌曲 ID 是 X,则生成一个介于 1 和 X 之间的随机数,称为 Y。执行如下查询:

SELECT * FROM songs WHERE song_id>=Y LIMIT 1

这将允许您的 ID 出现空白,并且速度会非常快。您可以记录在另一个表中播放的歌曲并将其过滤掉。如果查询没有返回结果,则反转随机数,如 Y = XY,然后再次运行查询。

于 2013-01-12T02:26:57.753 回答