如何在Socket.io中强行断开连接?

时间:2013-04-26 13:04:35

标签: javascript socket.io

我正在尝试手动断开我的客户与聊天的连接。让我展示一下我的基本代码:

...

<h1>welcome to my chat</h1>

<script>
$(function(){

    var mySocket = io.connect('/game1/roomGame);

    $('#force').click(function(event){
    mySocketdisconnect();
    })


});
</script>

在我的服务器中:

    mySocket.on('disconnect', function(){
             console.log(" disconnection forced ");
    }); 

在我的控制台中,当我离开路由/game1/roomGame时,我看到了消息disconnection forced,但我确定断开连接并没有真正完成,因为我在控制台中也看到了一些消息像:

   debug - emitting heartbeat for client f8oj63XfQ7T8mbNFP8SR
   debug - websocket writing 2::
   debug - set heartbeat timeout for client f8oj63XfQ7T8mbNFP8SR
   debug - got heartbeat packet
   debug - cleared heartbeat timeout for client f8oj63XfQ7T8mbNFP8SR
   debug - set heartbeat interval for client f8oj63XfQ7T8mbNFP8SR

如何关闭这个连接呢?

1 个答案:

答案 0 :(得分:1)

您想致电mySocketRoom.socket.disconnect()。将其作为disconnect公开在您的服务上:

return {
  ...
  disconnect: function() { mySocketRoom.socket.disconnect(); }
};

此外,如果您的gameRoom仅在用户位于特定控制器中时持续,$locationChangeStart$locationChangeSuccess似乎过于笼统。

只要控制器$ scope被销毁,我就会断开连接。

$scope.$on('$destroy', function() {
  mySocketRoom.disconnect();
});

文档:http://docs.angularjs.org/api/ng.$rootScope.Scope#$destroy