我正在使用Angular.js创建一个Ionic应用程序。我的应用程序中有2个页面模板,即登录和聊天。每个都有自己的状态。在登录页面上,用户输入他们的名字并点击登录。这使状态从登录变为聊天。在这里,用户可以使用Socket.io事件与其他用户聊天。这很好。
但在某些情况下,用户可能希望断开/注销并使用其他名称重新登录。在这种情况下,socket.io不会连接到服务器,并且只要单击登录按钮,应用程序就不会响应,即当应用程序尝试连接到服务器时。这是代码。
我的套接字连接服务
.factory('socket',function(socketFactory){
//Create socket and connect to http://chat.socket.io
var myIoSocket = io.connect('https://node-samarthagarwal.c9.io',
{
'forceNew': true,
'reconnection': false,
'reconnectionDelay': 1000,
'reconnectionDelayMax' : 5000,
'reconnectionAttempts': 5
});
mySocket = socketFactory({
ioSocket: myIoSocket
});
return mySocket;
})
登录按钮上的代码
$scope.nickname = nickname;
console.log($scope.nickname);
//sanitize the nickname
if(nickname)
{
$state.go('chat',{nickname: nickname},{reload: true})
}
}
聊天页面控制器代码
.controller('ChatController',function(socket, $scope, $sce, $state, $cordovaMedia, $ionicPopup, $ionicPlatform, $ionicLoading, $stateParams, $ionicScrollDelegate, sharedProperties, $timeout) {
$scope.statusMessage = "Welcome to ChatterBox"
$scope.messages = [];
$scope.nickname = $stateParams.nickname;
$scope.userData = {};
$scope.reLogin = true;
var COLORS = ['#f44336', '#E91E63', '#9C27B0', '#673AB7', '#3F51B5', '#009688'];
$ionicLoading.show({template: "Connecting..."});
if(sharedProperties.getProperty().isFBAuthenticated) // Meaning that FB Authentication is used
{
var user = sharedProperties.getProperty();
socket.on('connect',function(){
console.log(this.id);
$scope.userData.socketId = this.id;
$scope.userData.fullName = $stateParams.nickname;
$scope.userData.displayPicture = user.displayPicture;
$scope.userData.color = $scope.getUsernameColor($stateParams.nickname);
//alert(JSON.stringify($scope.userData));
socket.emit("onlineUserUpdateAdd", $scope.userData);
.....
......
.......
}
}
我了解到我们无法创建两个套接字连接。我该怎么做才能创建另一个连接或重用现有连接?
答案 0 :(得分:0)
我刚刚将此代码添加到我的控制器
if(!socket.connected)
socket.connect();
这会重用现有连接。