gpt4 book ai didi

javascript - 在 Node js 中的 Socket.io 中为特定用户发出事件

转载 作者:太空宇宙 更新时间:2023-11-04 01:37:13 25 4
gpt4 key购买 nike

我分别使用了 socket.onio.emit 方法来请求和响应。目前我面临的问题是我得到了所有用户的响应。我只想通知特定用户。但是当我在 stackoverflow 上问上面的问题时,有人让我关注 this关联。但在上面的链接中,提到,我们需要一个用户 ID,当用户登录我们的应用程序时我可以获得该 ID。请查看我的 server.jsrouter.js 文件代码。

router.js

const express = require('express');
const router = express.Router();
const passport = require('passport');

const userController = require('../controllers/user');

router.route('/auth/login')
.post(
userController.login
);

router.route('/users')
.get(
passport.authenticate('jwt', { session: false }),
userController.getUsers
);

module.exports = router;

server.js

const express = require('express');
const router = require('./router');
const bodyParser = require('body-parser');

const app = express();
app.use(bodyParser.json());

var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(PORT, () => {
console.log(`👂\tListening on port ${PORT}!`);
});
app.io = io;
app.use('/api', router);

注意:现在谁能告诉我,如果我注册并登录了我的应用程序,如何为特定用户发出事件。

最佳答案

尝试这样的事情

let sockets = [];

io.on("connection", function(socket) {
socket.on("online", data => {
socket.name = data.username;
sockets[data.username] = socket.id;
});
socket.on("message", function(data) {
socket.broadcast.emit("public", data);
});

socket.on("send_personal_message", function(data) {
socket.to(sockets[data.user]).emit("personal", data);
});

socket.on("disconnect", reason => {
sockets.splice(sockets.findIndex(id => id === socket.id), 1);
});
});

在 send_personal_message 中,您将收到来自数据对象内的发件人的用户名。以下代码将帮助您向选定的用户发送消息。

socket.to(sockets[data.user]).emit("personal", data);

关于javascript - 在 Node js 中的 Socket.io 中为特定用户发出事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54169470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com