2013-02-27 87 views
1

我試圖向所有連接的客戶端廣播一個產品更新的簡單價格。 它的工作原理。這意味着廣播是成功的,我可以更新我的價值觀,但廣播是什麼問題。socket.io廣播太多的數據包

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

是在客戶端提供的代碼被再次叫什麼名字?當您多次創建新連接時會發生這種情況,連接會被多次觸發。 – user568109 2013-02-27 04:35:59

+0

沒有點擊事件在輸入[type = button]上,被調用一次 – 2013-02-27 04:50:30

回答

0

我不知道,如果你這樣做是有意或mistake.Right現在你有一個

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