2015-04-24 90 views
0

后才起作用我打开了两个选项卡中的我的页面。出于某种原因,只有在两个标签都提交了帖子后,客户端才会触发。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); 
    }); 
}); 

UPDATE:

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

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

    socket = socketFactory({ 
    ioSocket: ioSocket 
    }); 

    return socket; 
}); 

更新2:我很笨!

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

回答

1

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

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

+0

您认为服务如何在两个标签之间进行通信?\ –

+0

现在使用该模块。同样的问题。每一个'开'事件似乎都在发射累计次数。更新了我的问题 – azium

+1

NEVERMIND!愚蠢的错误。在submitPost事件中有我的'on'处理程序。谢谢! – azium