Node.js socket.io广播的数据包太多

Node.js socket.io广播的数据包太多,node.js,socket.io,Node.js,Socket.io,我正在尝试向所有连接的客户广播一个简单的产品更新价格。 它起作用了。这意味着广播是成功的,我可以更新我的值,但广播的是问题 Socket.io广播自服务器启动以来的所有消息,而不是只发送最后一条消息。我似乎找不到如何将广播限制在最新的价格 服务器: // Broadcast new price io.sockets.on('connection', function (socket) { socket.on('bidAction', function(from, msg){ sock

我正在尝试向所有连接的客户广播一个简单的产品更新价格。 它起作用了。这意味着广播是成功的,我可以更新我的值,但广播的是问题

Socket.io广播自服务器启动以来的所有消息,而不是只发送最后一条消息。我似乎找不到如何将广播限制在最新的价格

服务器:

// Broadcast new price
io.sockets.on('connection', function (socket) {
  socket.on('bidAction', function(from, msg){
    socket.broadcast.emit('bid', { price: new_price, product_id: productID });
  });
});
客户:

var socket = io.connect('http://localhost');
socket.on('bid', function (data) {
  console.log(data);

  // We get the element with price
  $('span.price').html(data.price.toFixed(2)) ;
});

// Now when the price is changed
$('.bid').click(function(){
  // We emit the bidding
  socket.emit('bidAction', {data: 'stuff'});
});

我不确定你这样做是故意的还是错误的。现在你有一个

function(from, msg)
并试图广播

price: new_price, product_id: productID
在您的示例中,new_price和productID都未定义

你能把你的代码改成下面的代码吗,这样就更有意义了

客户端:

socket.emit('bidAction', {new_price: 'stuff' , productID : 'stuff'});
服务器端:

io.sockets.on('connection', function (socket) {
  socket.on('bidAction', function(data){
    socket.broadcast.emit('bid', { price: data.new_price, product_id: data.productID });
  });
});

是否再次调用客户端上给定的代码?当您多次创建新连接时,就会发生这种情况。不,单击事件发生在一个名为“一次”的输入[type=button]上