socket.io客户端' on'只有在客户发出'

时间:2015-04-24 17:27:05

标签: angularjs socket.io

我在两个标签页面中打开了我的页面。由于某种原因,客户' on'只有在两个标签都提交了帖子后才会触发。

// server
io.on('connection', function (socket) {
  socket.on('newPost', function (post) {
    io.emit('newPostReturn', post)
    console.log(post)
  })
})

// client (angular)
$rootScope.socket = io('http://172.28.28.201:3000');
$rootScope.socket.emit('newPost', post);
$rootScope.socket.on('newPost', function (post) {
  $scope.$apply(function () {
    $scope.posts.push(post);
  });
});

更新:

已更改为使用https://github.com/btford/angular-socket-io。同样的问题。另外我注意到,在第三次发出后,每个客户重新运行' on'下一次。这就像第一次触发' on'零次,然后每次后续调用都会触发一次额外的时间。

.factory('socket', function (socketFactory) {
  var ioSocket = io.connect('http://172.28.28.201:3000');

  socket = socketFactory({
    ioSocket: ioSocket
  });

  return socket;
});

更新2:我愚蠢!!

我有我的' on'处理程序INSIDE提交帖子事件。将它移到外面,当然,一切都按预期工作。现在一切都很完美。感谢

1 个答案:

答案 0 :(得分:1)

我建议你创建一个服务来创建一个服务来处理socket.io连接;寻找angular socket io,它实际上是一个服务包装器。

你将有一个较少耦合的实现,它将更容易处理实例和连接。