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

时间:2013-01-11 23:44:06

标签: php algorithm node.js

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

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

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

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

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

这会是一种有效的方法吗?

2 个答案:

答案 0 :(得分:0)

已编辑:了解服务器的更多信息。

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

  1. 从数据库中选择一首随机歌曲
  2. 将歌曲ID推送到收听历史记录缓冲区。
  3. 将数据返回给客户
  4. 如果您计划将用户数据存储在服务器上,则实际上不需要维护随机生成的歌曲列表。

    否则,你非常关注。使用会话来识别用户。

答案 1 :(得分:0)

假设您使用的是像mysql这样的数据库,或者与歌曲关联和ID的任何内容,您可以生成一个随机数并使用它来从数据库中选择一首随机歌曲。任何基于身份的数据存储都可以为此工作,并且可以非常好地扩展。

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

SELECT * FROM songs WHERE song_id>=Y LIMIT 1

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