2016-07-15 216 views
0

我有從服務器發送到客戶端的日誌消息,並從服務器和日誌記錄到客戶端一致,現在我有附加功能停止和播放日誌給用戶的一些控制,所以我想停止到斷開socket.io連接並開始播放socket.io連接再次,首先我試圖停止斷開連接,但我不能發送消息到服務器,任何想法下面的代碼或任何更好的解決方案,以實現這些任務有什麼錯? main.html中如何從客戶端斷開連接並重新連接socket.io?

<button type="button" class="btn btn-success" ng-click="stopLogs()">stop</button> 

ctrl.js

$scope.stopLogs = function(){ 
     socket.emit('end'); 
    } 

angularSOcketFactory.js

angular.module('App').factory('socket', function ($rootScope) { 
    'use strict'; 
     var socket = io.connect('http://localhost:3000'); 
     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); 
         } 
        }); 
       }) 
      } 
     }; 

}); 

server.js

var io = require('socket.io')(server); 
    io.sockets.on('connection',function(){ 
    // Producer.startProducer(); 
    ditconsumer.start(function(value){ 
     io.emit('ditConsumer',value) 
    }); 
    io.sockets.on('end', function() { 
     socket.disconnect(); 
     console.log('it will disconnet connection'); 
    }); 
}); 

回答

2

這段代碼是錯誤的:

io.sockets.on('end',function() { 
console.log('this will disconnet socket connection'); 
io.sockets.disconnect(); 
}); 

您需要將該事件偵聽器應用於一個特定的套接字,然後您需要斷開一個特定的套接字。

你不顯示的服務器代碼,一般情況下,但它可以這樣做:

io.on('connection', function(socket) { 
    socket.on('end', function() { 
     socket.disconnect(); 
    }); 
}); 

你也可以只在客戶端斷開連接,而不是直接要求該服務器做它您。

+0

我更新了我的問題,以便從服務器端獲得更好的理解,但是這裏的問題是,當我點擊'stopLogs()'方法時,它甚至不會從客戶端發出消息。 – hussain

+0

@hussain - 那麼,你的服務器代碼仍然是錯誤的,需要更正。 'io.sockets.on(...)'是錯誤的,應該是'socket.on(...)'。我不知道角度,所以如果實際上存在問題,我會將其留給別人。 – jfriend00

+0

'socket.on('end')'拋出異常套接字沒有被定義,我用'io.on('end')'嘗試了相同的結果。 – hussain

相關問題