我希望查询一个表,并在它们进来时将内容写入套接字,以获得更大的查询。 I was reading the documentation for streams。我试图用socket.io来实现它。以下是$date = '2015-01-10';
$team - 'Team C';
$sql = "select * from TABLE
where date_format(IntervalDate, '%Y-%m-%d') <> $date
and team = $team";
路由的示例,其中/users
是app
的实例,express
是io
个实例。
socket.io
我想知道的是; 如何将此查询的结果流式传输到io套接字?我想在找到结果时发出module.exports = function (app, io) {
app.get('/users', function (req, res, next) {
const limit = req.queryParams.limit || 100;
const stream = req.db.select('*').from('users').limit(limit).stream();
req.on('close', stream.close.bind(stream)); // manually close on request cancel
// how can you stream to the socket?
// how do you know when the amount is reached to end the response?
});
}
事件,使用tablename,id和found条目作为参数。
答案 0 :(得分:3)
如何流式传输到套接字?
您可以通过侦听knex流中的data
事件并通过io.emit
将数据传递到socket.io来访问流式数据库行。
你怎么知道何时达到结束回应的金额?
该流将发出end
事件。
您知道在end
事件触发时已完成流,但由于您接受HTTP通道上的请求但通过单独的Web套接字通道进行响应,因此您可以将HTTP响应发送到res
如果您愿意,可以立即等待数据库查询结果(res.send()
)。
module.exports = function (app, io) {
app.get('/users', function (req, res, next) {
const limit = req.queryParams.limit || 100;
const stream = req.db.select('*').from('users').limit(limit).stream();
stream.on('data', function (row) {
io.emit('user', row)
})
.on('error', function (error) {
io.emit('error', error.message)
})
.on('end', function () {
io.emit('end')
})
req.on('close', stream.close.bind(stream)); // manually close on request cancel
// how can you stream to the socket?
// how do you know when the amount is reached to end the response?
});
}