【发布时间】:2019-11-07 12:48:11
【问题描述】:
我需要保持连接打开,所以在完成音乐后我会写入新数据。问题是我这样做的方式,流在第一首歌之后就停止了。 如何保持连接打开并播放下一首歌曲?
const fs = require('fs');
const express = require('express');
const app = express();
const server = require('http').createServer(app)
const getMP3Duration = require('get-mp3-duration')
let sounds = ['61880.mp3', '62026.mp3', '62041.mp3', '62090.mp3', '62257.mp3', '60763.mp3']
app.get('/current', async (req, res) => {
let readStream = fs.createReadStream('sounds/61068.mp3')
let duration = await getMP3Duration(fs.readFileSync('sounds/61068.mp3'))
let pipe = readStream.pipe(res, {end: false})
async function put(){
let file_path = 'sounds/'+sounds[Math.random() * sounds.length-1]
duration = await getMP3Duration(fs.readFileSync(file_path))
readStream = fs.createReadStream(file_path)
readStream.on('data', chunk => {
console.log(chunk)
pipe.write(chunk)
})
console.log('Current Sound: ', file_path)
setTimeout(put, duration)
}
setTimeout(put, duration)
})
server.listen(3005, async function () {
console.log('Server is running on port 3005...')
});
【问题讨论】:
-
您现在遇到的问题是什么?另外,另一件事是您不应该使用
setTimeout(put, duration)。服务器仍应在较短的持续时间内流式传输其余部分。