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

时间:2017-06-20 10:49:28

标签: express socket.io

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

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

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文件,其中我将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}`));

然后我在我的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;
});

但是通过上述实现,更新任何用户的硬币,更新客户端的所有用户硬币,因为所有客户端都在监听同一个套接字user coins

要解决上述问题,我知道我必须做这样的事情,

// sending to individual socketid (private message)
socketIO.io.sockets.to(<socketid>).emit('user coins', {
    userCoins: updatedUser.coins,
});

但我担心的是如何通过我当前的实施获得<socketid>

1 个答案:

答案 0 :(得分:0)

您可以通过侦听与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

获取其ID

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

Source of the exemple for the connection listener

Socket object description