如何从大型播放列表中发送随机歌曲的客户端数据


How to send client data of a random song from large playlist?

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

但是现在我有多个客户端调用API,什么是最好的方法来返回关于随机歌曲在播放列表中,他们最近没有听到的数据?有几千首歌,还在扩大。

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

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

为了确保不播放最近播放的歌曲,我将在数据库中拥有前50首歌曲的历史记录,并进行歌曲ID比较,如果匹配,则获取下一首歌曲。

这是一个可行的方法吗?

EDITED:得到更多的服务器信息

在用户的收听历史记录中存储X数量的歌曲(buffer, size X)。实现一个随机请求歌曲的函数。当客户端需要一个新的随机歌曲:

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

如果您打算在服务器上存储用户数据,实际上没有必要维护随机生成的歌曲列表。

否则,你就说对了。使用会话来标识用户

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

如果您知道您的最高歌曲ID是X,那么在1和X之间生成一个随机数,称其为y。

SELECT * FROM songs WHERE song_id>=Y LIMIT 1

这将允许您的ID中有空白,并且将非常快。您可以在另一个表中保存播放的歌曲的日志,并将其过滤掉。如果查询没有返回结果,则将随机数反转,如Y = X-Y,然后再次运行查询。