我想在 express 后端实现 socket.io ,以告知用户请求期间的任务状态(状态就像启动,处理一样) ,...)
因此,用户单击按钮,套接字连接打开并等待事件,在长时间运行请求后端向客户端发送数据,最后响应到来并请求完成,结果显示给用户。
在我的 index.js 文件中,我引导应用程序
const express = require('express'),
app = express(),
router = require('./router'),
server = require('http').Server(app);
var io = require('socket.io')(server);
/* other required modules*/
server.listen(config.port,'127.0.0.1');
router(app, io);
在我的 router.js
中const taskController = require('./controllers/task');
/* other required modules*/
module.exports = function(app, io) {
const apiRoutes = express.Router();
apiRoutes.post('/task/do', taskController.doTask(io));
}
在我的 task.js
中exports.doAnalysis = function(socket){
return function(req, res){
socket.emit('task-start', 'Your task is started');
...
}
}
当我这样做时,它会发出所有连接的客户端。
我想要做的是,从我的控制器的功能发出只调用端点的特定客户端,仅发送者。
另外,我无法在我的任务控制器中执行以下代码段:
exports.doTask = function(socket){
return function(req, res){
socket.on('connection', function(s){
s.emit('task-start', 'Your task is started');
...
})
}
}
显然,传递io对象不适合这种情况。
我知道我应该获取所有套接字ID并使用特定套接字ID发出但是, 这样做的正确方法是什么?