在我的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>
。
答案 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
因此,您可能需要使用连接侦听器包装代码。