Socket.IO Internet Explorer 6 (IE6)에서 Emit이 1번 만 되는 현상

IE 6에서는 주로 htmlfile이라는 Transport를 사용한다.
근데 IE 6에서 접속한 Client가 Emit을 보낼 때 1회 이후에는 안되는 경우가 생길 때가 있다. (환경에 따라 상이함)
이 땐 Flashsocket Transport를 열어주면 IE 6에서도 Socket.io를 안정적으로 활용할 수 있게 된다.

설정법

Socket.io는 사용가능한 5가지 Transport 중 Flashsocket를 기본적으로 막고 있으므로 따로 열어주어야 한다.

Server-side (Wiki 참조)

var io=require('socket.io').listen(app);
io.configure(function() {
io.set('transports', [
    'websocket',
    'flashsocket',
    'htmlfile',
    'xhr-polling',
    'jsonp-polling'
  ]);
});

위 코드는 사용가능한 transport에 flashsocket까지 포함하여 재설정하는 것이다.
Client 측에서는 Server를 타므로 설정이 필요 없다.

위의 설정을 마쳤는데도, 다음과 같은 이유로 emit이 안될 수 있다.

  1. 서버에 10843 (Flashsocket Port) 포트가 열려있지 않은 경우
    : Node에서는 기존의 843 포트가 아닌 10843 포트를 이용한다.
  2. 서버에 포트가 열려있지만 방화벽이 막은 경우
    : 방화벽에 10843 포트를 무시하도록 설정해야한다.
  3. 클라이언트에 Flash Player가 설치되지 않은 경우
    : socket.io-client는 Flash Player가 없을경우 자동으로 설치하도록 유도하는 기능이 없다. 브라우저 체크를 통해 IE6인경우 swfobject를 이용하여 삽입하는 방법이 있다.