Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 使用什么代替套接字。removeAllListeners();在客户端_Sockets_Angularjs_Socket.io - Fatal编程技术网

Sockets 使用什么代替套接字。removeAllListeners();在客户端

Sockets 使用什么代替套接字。removeAllListeners();在客户端,sockets,angularjs,socket.io,Sockets,Angularjs,Socket.io,我遇到了一个与类似的问题,但公认的答案似乎使用了一个不再存在的函数,那么用什么来代替socket.removeAllListeners()?我正在使用socket.io v.9.16socket.removeAllListeners()仍然存在。无法调用它的原因是真正的套接字是这样的:var socket=io.connect() 以下代码中的“套接字”是angular factory返回的包装,它只有两种方法:on和emit $scope.$on('$destroy', function (e

我遇到了一个与类似的问题,但公认的答案似乎使用了一个不再存在的函数,那么用什么来代替
socket.removeAllListeners()?我正在使用socket.io v.9.16

socket.removeAllListeners()
仍然存在。无法调用它的原因是真正的套接字是这样的:
var socket=io.connect()

以下代码中的“套接字”是angular factory返回的包装,它只有两种方法:
on
emit

$scope.$on('$destroy', function (event) {
  socket.removeAllListeners();
  // or something like
  // socket.removeListener(this);
});
您可以做的是向
socket
工厂添加一个新的
getSocket
方法,如下所示:

app.factory('socket', function ($rootScope) {
  var socket = io.connect();
  return {
    on: function (eventName, callback) {
      // ...
    },
    emit: function (eventName, data, callback) {
      // ...
    },
    getSocket: function() {
      return socket;
    }
  };
});
$scope.$on('$destroy', function (event) {
  socket.getSocket().removeAllListeners();
  // or something like
  // socket.getSocket().removeListener(this);
});
然后你可以这样做:

app.factory('socket', function ($rootScope) {
  var socket = io.connect();
  return {
    on: function (eventName, callback) {
      // ...
    },
    emit: function (eventName, data, callback) {
      // ...
    },
    getSocket: function() {
      return socket;
    }
  };
});
$scope.$on('$destroy', function (event) {
  socket.getSocket().removeAllListeners();
  // or something like
  // socket.getSocket().removeListener(this);
});

如果要将代码保留在服务本身中,实际上可以将其添加到要返回的对象中:

  removeAllListeners: function() {
     socket.removeAllListeners();
  }

然后在控制器中,只需调用
socket.removeAllListeners()

非常感谢,我仍然习惯于使用包装器函数。