连接第二次socket.io

时间:2015-07-08 19:04:10

标签: angularjs node.js cordova socket.io ionic-framework

我正在使用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);
.....
......
.......
    }
}

我了解到我们无法创建两个套接字连接。我该怎么做才能创建另一个连接或重用现有连接?

1 个答案:

答案 0 :(得分:0)

我刚刚将此代码添加到我的控制器

if(!socket.connected)
    socket.connect();

这会重用现有连接。