停止 Socket IO 事件触发相同次数的调用

Stop Socket IO event firing same number of times it's called

我有一个 Ionic/AngularJS 应用程序,它在函数中向我的节点服务器发出一个事件,如下所示:

  $scope.doKeywordSearch = function (keyword, details) {
    var lat = details.geometry.location.lat();
    var lng = details.geometry.location.lng();
    socket.emit('keywordSearch', {lat: lat, lng: lng, keyword: keyword});
    socket.on('searchResults', function (results) {
      console.log(results);
    });
  }

在服务器上,事件是这样处理的:

io.sockets.on('connection', function(socket) {
  socket.on('keywordSearch', function(searchData) {
    var searchResults = [];
    function(){
      //do loads of search stuff here
    }
    setTimeout(function(){
      socket.emit('searchResults', {results: searchResults});
    },2000)
  })
});

客户端的searchResults事件是这样处理的:

socket.on('searchResults', function (results) {
  console.log(results);
});

每次我调用该函数时,返回的结果与我之前调用该函数的次数相同,而 Node 应用程序是 运行,+ 1。因此每次都会递增。

我怎样才能阻止这种情况发生,并在每次调用该函数时返回一次? 我构建 Socket.io 事件的方式是否有错误?

每次你调用 doKeywordSearch 你通过调用

添加另一个监听器
socket.on('searchResults', function (results) {
    console.log(results);
});

确保您只在应用加载后调用 socket.on('searchResults'... 一次。