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'

io.emit 与 socket.emit

Socket.emit 不发送或 socket.on 不接收?

io.socket.emit 返回未定义