Socket.emit 带来多个值
Posted
技术标签:
【中文标题】Socket.emit 带来多个值【英文标题】:Socket.emit brings multiple values 【发布时间】:2019-04-03 16:34:50 【问题描述】:socket.on 内的 socket.emit 在每次发射后连接相同的值。 这是我在服务器端的代码
io.on('connection', function(socket)
let balance = 6000;
console.log('a user connected');
socket.on('giveValue',function(data)
if(data.msg==="New Value")
let x = Math.floor(Math.random() * 100 - 50);
balance += x;
socket.emit('takeValue',balance:balance,value:x);
);
socket.on('disconnect',function()
console.log('User disconnected');
);
socket.on('getBalance',(data)=>
if(data.msg==='bringBalance')
socket.emit('ubalance',data:balance);
)
);
这个在客户端,对于客户端,我使用的是 Angular 6
constructor()
this.socket = io('http://localhost:4000');
ngOnInit()
this.socket.emit('getBalance',msg:"bringBalance");
this.socket.on('ubalance',(data)=>
console.log(data);
this.balance=data.data;
);
getSum(event)
this.socket.open();
this.socket.emit('giveValue',msg:"New Value");
this.socket.on('takeValue', (data) =>
this.balance=data.balance;
console.log("Value====="+data.value) + "\n";
console.log("Balance======"+data.balance);
);
每次点击运行 getSum() 函数并在后端生成随机值后,将该值添加到 balance.All 这一切都在我的后端。 所以问题是 socket.on("takeValue") 每次点击后都会带来一个 相同的值。我该如何修复这部分。抱歉我的语言错误,希望你能理解我。感谢您的关注和帮助。
【问题讨论】:
【参考方案1】:您的问题是您在函数中声明了.on
事件,并且每次运行该函数时,都将新的侦听器设置为takeValue
事件。试试下面的 sn-p 或类似的东西
constructor()
this.socket = io('http://localhost:4000');
this.socket.on('ubalance',(data)=>
console.log(data);
this.balance=data.data;
);
this.socket.on('takeValue', (data) =>
this.balance=data.balance;
console.log("Value====="+data.value) + "\n";
console.log("Balance======"+data.balance);
);
ngOnInit()
this.socket.emit('getBalance',msg:"bringBalance");
getSum(event)
this.socket.open();
this.socket.emit('giveValue',msg:"New Value");
【讨论】:
谢谢,我找到了解决这个问题的方法,我只是在 ngOnInit 中声明了这些函数。它工作正常。再次感谢 Milad Aghamohammadi。以上是关于Socket.emit 带来多个值的主要内容,如果未能解决你的问题,请参考以下文章
socket.io - socket.emit、socket.on、socket.send
在 socket.on() 之外的 Socket.emit()
io.sockets.socket(socket_id).emit() - 没有方法'socket'