仅接受客户端在socket.io中发出的第一个事件并丢弃重复事件

时间:2015-11-27 12:26:32

标签: javascript node.js socket.io

我是node.js和socket.io的新手。我正在创建一个Web应用程序,其中将有数百个客户等待在产品中出价。

我们使用了jquery计时器,当此计时器变为零时,所有客户端都会向服务器发出拍卖关闭事件。

现在我需要的是只有一个(第一个)产品关闭事件被nodejs服务器(app.js)接受,其余的需要被丢弃。

//client requesting server to close the product     
socket.emit('time_finished', {'id':id,'name':name,'time':time});

//and my server code (receive time finished event from client)
socket.on('time_finished',function(data) {
     //performing product closing operation here
}

任何帮助都会非常值得注意。

1 个答案:

答案 0 :(得分:1)

如果您只有一个产品,则可以在第一个事件到达后将布尔值设置为true。

    var alreadySent = false;
    socket.on('time_finished',function(data) {
         if(!alreadySent){
            alreadySent = true;
            //performing product closing operation here
         }
    }

但如果您有许多产品,则可以将状态保存在数组或外部数据库中。

    var alreadySentIds = [];
    socket.on('time_finished',function(data) {
         if(alreadySentIds.indexOf(data.productId) == -1){ // not existing
            alreadySentIds.push(data.productId);
            //performing product closing operation here
         }
    }