基本的にAngularJS上でSocket.IOを稼働させる際にはangular-socket-ioを利用するかと思います。
こちらを利用する上で気をつけなければいけないことがあったので書き留めておきます。
問題点
Controllerからsocket.onを使用してイベントリスナーを貼っていた所、一度別のコントローラにいった後にもう一度同じコントローラに戻ると2重にイベントが発火されてしまいました。
解決策
解決するためには、Controllerが破棄される際と同時にsocketのイベントリスナーを破棄する必要があります。
$scope.$on('$destroy', function(event) {
socket.removeAllListeners();
});
当初、なんでなんで?Controllerのオブジェクトが残ってるの?なんで発火されてしまうの?とか色々思いましたがイベントリスナーが残ってしまうんですね。
解決して良かった。
後ほど分かったことですが、
2重以上に発火される原因として、emitが複数回流れてしまってonがその2倍返されたりすることがありました。これは単純な記述ミスでした。socket通信は難しいですね。