【问题标题】:socket.io broadcasting too many packetssocket.io 广播太多数据包
【发布时间】:2014-02-16 01:36:44
【问题描述】:

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

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'});
});

【问题讨论】:

  • 客户端给出的代码是否再次被调用?当您多次创建新连接时会发生这种情况,连接会被多次触发。
  • 没有点击事件在输入[type=button]上,调用一次

标签: node.js socket.io


【解决方案1】:

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

function(from, msg)

并尝试广播

price: new_price, product_id: productID

new_price 和 productID 在您的示例中都是 undefined

您能否将您的代码更改为以下代码以使其更有意义?

客户端:

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 });
  });
});

【讨论】:

    猜你喜欢
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多