2015-04-24 95 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