【发布时间】:2016-11-15 15:36:41
【问题描述】:
当我将用户重新连接到我的 socket.io 测验应用程序时,我的 angularjs/ionic 应用程序中的握手数据出现了一些问题。
如果用户断开连接然后再次连接,我想在连接到服务器时更新从客户端发送的握手数据。 (我需要一些握手数据,因为服务器会检查用户是第一次加入,还是刚刚失去与测验的连接)
我的问题/现在发生了什么:
- 一个用户想要参加 id 为“12345”的测验
- 用户连接到我的服务器,发送握手数据:
{user_id: 1, quiz_code: 12345} - 然后服务器将用户“1”添加到测验编号“12345”
- 当测验结束时,用户使用 io.disconnect() 并离开测验
- 用户现在决定加入测验“66666”
- 现在套接字工厂似乎记住了旧的握手。
- 所以当客户端连接到服务器时它发送
{user_id: 1, quiz_code: 12345}但应该发送{user_id: 1, quiz_code: 66666}
我的 angular.js 控制器
.controller('QuizCtrl', function(SocketService) {
$scope.$on('$ionicView.enter', function(e) {
//this seems to be the problem -> it reuses the old data in the factory
SocketService.connect();
});
$scope.$on('$ionicView.leave', function(e) {
SocketService.removeListener();
SocketService.disconnect();
});
});
我的 angular.js 套接字工厂
.factory('SocketService', function(socketFactory){
var data = {
activeQuiz : {quiz_code: 12345, quiz_ip: some.ip},
currentUser : {user_id: 1}
};
//This data is loaded from localStorage in the application, so it can be changed
var myIoSocket = io.connect(data.activeQuiz.ip, {query: 'user_id='+data.currentUser.user_id+'&quiz_code='+data.activeQuiz.quiz_code});
mySocket = socketFactory({
ioSocket: myIoSocket
});
return mySocket;
})
所以 3 个问题:
- 我知道工厂是单例的,但我可以更新工厂中的数据吗?
- 当用户进入控制器时,我可以“重新注入”工厂或“重置”工厂吗?
- 可能有更好的方法吗?
【问题讨论】:
标签: angularjs sockets socket.io factory