Express 如何在socket.io(nodejs)中获取socketid

Express 如何在socket.io(nodejs)中获取socketid,express,socket.io,Express,Socket.io,在我的nodejs应用程序中,我使用socket.io进行套接字连接 我正在像这样配置我的服务器端代码 var socketApi = require('./server/socket_io'); // Create HTTP server. const server = http.createServer(app); // Attach Socket IO var io = socketApi.io; io.attach(server); // Listen on provided

在我的nodejs应用程序中,我使用socket.io进行套接字连接

我正在像这样配置我的服务器端代码

var socketApi = require('./server/socket_io');


// Create HTTP server.
const server = http.createServer(app);

// Attach Socket IO
var io = socketApi.io;
io.attach(server);


// Listen on provided port, on all network interfaces.
server.listen(port, () => console.log(`API running on localhost:${port}`));
socket.io配置在单独的文件中

//socket_io.js

var socket_io = require('socket.io');
var io = socket_io();
var socketApi = {};

socketApi.io = io;

module.exports = socketApi;
下面是我的
server.js
文件,我在其中像这样将套接字io连接到服务器

var socketApi = require('./server/socket_io');


// Create HTTP server.
const server = http.createServer(app);

// Attach Socket IO
var io = socketApi.io;
io.attach(server);


// Listen on provided port, on all network interfaces.
server.listen(port, () => console.log(`API running on localhost:${port}`));
然后我在我的
game.js
文件中使用socket.io来发出这样的更新用户硬币

 //game.js

 var socketIO = require('../socket_io');

 function updateUserCoins(userBet) {
    userId = mongoose.Types.ObjectId(userBet.user);

    User.findUserWithId(userId).then((user) => {
        user.coins = user.coins - userBet.betAmount;

        user.save((err, updatedUser) => {
            socketIO.io.sockets.emit('user coins', {
                userCoins: updatedUser.coins,
            });
        });

    })
}
然后在我的客户方面,我正在做这样的事情

socket.on('user coins', (data) => {
  this.coins = data.userCoins;
});
// sending to individual socketid (private message)
socketIO.io.sockets.to(<socketid>).emit('user coins', {
    userCoins: updatedUser.coins,
});
但在上述实现中,更新任何用户的硬币都会更新客户端的所有用户硬币,因为所有客户端都在监听相同的套接字
用户硬币

为了解决上面的问题,我知道我必须这样做

socket.on('user coins', (data) => {
  this.coins = data.userCoins;
});
// sending to individual socketid (private message)
socketIO.io.sockets.to(<socketid>).emit('user coins', {
    userCoins: updatedUser.coins,
});
//发送到单个socketid(私有消息)
socketIO.io.sockets.to().emit('user coins'{
userCoins:UpdateUser.coins,
});

但我担心的是,我当前的实现将如何获得

您可以通过监听到socket.io服务器的连接来获得它:

io.on('connection', function (socket) {
   socket.emit('news', { hello: 'world' });
   socket.on('my other event', function (data) {
     console.log(data);
   });
});
这里有一个套接字对象(
io.on('connection',function(socket)
),您可以使用
socket.id

因此,您可能需要使用连接侦听器包装代码