我刚刚开始接收socket.io。我试图在angular.js中使用它,一切正常。但是,它会多次返回
在我的controller.js
中socketio.emit('GameOver',$scope.currentPlayer.Name);
socketio.on('GameOverEmit',function(data){
if(data === $rootScope.user.user_name){
var result = {
opponent : rdyplayers.user_name,
result : "won"
};
// keep getting multiple result
console.log(result);
}else{
var result = {
opponent : rdyplayers.user_name,
result : "lose"
};
// keep getting multiple result
console.log(result);
}
});
在我的server.js
中io.sockets.on('connection', function (client) {
client.user_name = user.user_name;
//Useful to know when someone connects
console.log('\t socket.io:: player ' + client.user_name + ' connected');
// playerturn
client.on('PlayerTurn',function(data){
io.emit('PlayerTurnEmit',data);
});
// game over
client.on('GameOver',function(data){
io.emit('GameOverEmit',data);
});
// button disabled
client.on('PlayerButtonDisabled',function(data){
io.emit('PlayerButtonDisabledEmit',data);
});
//When this client disconnects
client.on('disconnect', function () {
//Useful to know when someone disconnects
console.log('\t socket.io:: client disconnected ' + client.user_name );
io.emit("disconnected",client.user_name);
}); //client.on disconnect
}); //io.sockets.on connection
我是否以正确的方式使用socket.io?为了向所有人广播数据,我只需将数据传递到emit
并使用on
将数据广播,例如将数据传递给服务器并将其传递回前端? / p>
答案 0 :(得分:2)
广播使用socket.broadcast.emit()
我在客户端代码中找不到任何套接字断开侦听事件代码。尝试添加socketio.disconnect
以断开客户端的连接
并且还通过添加socketio.on('disconnect', function(){do something})
答案 1 :(得分:2)
它是由controller.js引起的,每当我重新访问页面时它都会建立一个新的套接字,所以我所做的就是当用户离开或关闭标签时它会删除所有的监听器。 我最终通过在我的service.js中添加了getsocket来解决它。
ttt.factory('socketio', ['$rootScope', function ($rootScope) {
'use strict';
var socket = io.connect();
return {
on: function (eventName, callback) {
socket.on(eventName, function () {
var args = arguments;
$rootScope.$apply(function () {
callback.apply(socket, args);
});
});
},
emit: function (eventName, data, callback) {
socket.emit(eventName, data, function () {
var args = arguments;
$rootScope.$apply(function () {
if (callback) {
callback.apply(socket, args);
}
});
});
},
getSocket: function() {
return socket;
}
};
}]);
在我的controller.js中我做了
$scope.$on('$destroy', function (event) {
socketio.getSocket().removeAllListeners();
});