[SW기술] Flash XML socket의 유용성/실시간 인터넷

digirave의 아바타

옛날 flash 5가 나오자마자 phpschool에 xmlsocket 관련 글을 쓴 것이 기억이 납니다... 아마 phpschool에 검색하면 나올 것입니다. 당시에 플래시 채팅 서버를 만들려고 flash, java를 배웠습니다. 그 이후에 flash가 계속 발전, actionscript 2.0 까지 발전되고, 실제 상용/오픈 소스 flash 전용 server도 현재 여러개 나와 있는 상태입니다.
<br/>
<br/>위에 있는 플래시는 제가 제작한 플래시 채팅방입니다(채팅방에서 /도움말 치면 몇 가지 기능을 보실 수 있습니다). AJAX의 한방향(asynchronous) 통신과는 달리 socket을 이용한 진정한 실시간 상방향(synchronous) 통신입니다. 현재 제 취미/여러가지테스트하는 마루타 홈페이지인 <a href="http://gagax.com">http://www.gagax.com</a> 에서 테스트 중입니다. 개발 마치면 제가 운영하는 메인 사이트인 <a href="http://www.kmle.co.kr">http://www.kmle.co.kr</a> 에 테스트/추가해볼까 생각중입니다.
<br/>
<br/>Xmlsocket을 이용해 플래시 게임에 실시간으로 접속자/점수 등에서 멀티플레이어/MMORPG 게임 까지 가능하고, 일반 커뮤너티에도 실시간 채팅방을 별도 flash 이외의 플러그인 없이 추가할 수 있는 등, 무한한 가능성이 있다고 생각됩니다. 의외로 국내외로 사용하는 사이트는 드뭅니다. 사실, 이 기술을 이용한 실시간 방문자 수 측정 관련 웹로그 서비스로 몇 년 전 학생 때 정보통신부 벤처창업경진대회 때 한번 제출해서 1차 합격, 2차에서 떨어졌습니다. ^^;
<br/>
<br/><a href="http://gagax.com">http://www.gagax.com</a>에서는 처음에 perl로된 서버를 자작 사용하다가, 너무 느려서, 자바로된 간단한 오픈 소스(aquaserver)를 참고로 새로운 자바 서버를 자작 사용하다가, 현재 자바로 된 새로운 서버로 교체했습니다. 제 생각에 50명 이상 넘어가기 시작하면 perl/python 같은 언어 보다는 threading이 강한 자바 서버가 훨씬 좋습니다.
<br/>
<br/>현재 오픈 소스 서버
<br/><a href="http://www.oregano-server.org">http://www.oregano-server.org/</a>
<br/>Oregano server
<br/>모 독일 방송국에서 서버 쪽에서 사용하고 있으며, 서버쪽은 java로 되어 있고, actionscript 1.0 라이브러리와 외부에서 제작한 actionscript 2.0 라이브러리가 있습니다. 실제로 저는 간단히 사용해본 경험이 있으며, 설명서는 상용 서버에 버금가는 정도의 설명/기능과 좋은 채팅 예제가 있습니다. 단점은 설치하는데 의외로 고생했고(알고 보면 설치하고 무지 쉬움), 이제는 소스 코드가 일부 "낡은" 기법들을 사용하고 있습니다. 제일 큰 단점은 활발한 커뮤너티가 없다는 것입니다. 현재 거의 업데이트 안되고 있습니다. Actionscript 2.0 라이브러리를 한글 윈도우에 사용할 꺼라면 소스 코드에 있는 코맨트를 다 지우시길 바랍니다. 플래시 인코딩 관련 버그(?)로 인해 독일어로 된 코맨트에 의해 소스 코드가 콤파일되지 않습니다. 이것 때문에 정말 미칠 뻔했습니다. ^^;
<br/>
<br/><a href="http://swocket.sourceforge.net/">http://swocket.sourceforge.net/</a>
<br/>SWocket
<br/>Python으로 제작된 flash socket server. 저는 python 사용하지 않고 있기 때문에 경험 "무", 평가 "무"
<br/>
<br/><a href="http://www.shovemedia.com/multiserver/">http://www.shovemedia.com/multiserver/</a>
<br/>Aquaserver
<br/>단 하루안에 100% 소스코드를 이해하고 서버를 제작할 수 있는 정도로 짧은 java source code. 예전에 flash 5가 나온 후 자바를 배우고, 이 소스 코드를 이용했습니다. 너무 단순해서 순식간에 분석할 수 있는 장점이 있지만, 역시나 io blocking/timeout이나 socket 에러 처리가 없고, 서버 부하를 위해서는 핵심 while loop 수정 필요합니다. 2년간 수정된 소스를 <a href="http://gagax.com">http://www.gagax.com</a>에서 사용했는데, 결국 쉽게 해결할 수 없는 io blocking 문제로 인해 하루에 3~4차례 채팅방이 멈춰 이번에 서버 쪽을 완전히 다른 것으로 교체했습니다. Webmonkey.com에 해당 소스를 거의 모든 부분 설명해주는 강좌(강추)가 있습니다.
<br/>
<br/><a href="http://www.stray.ch/site/laboratory/flash_sockets.html">http://www.stray.ch/site/laboratory/flash_sockets.html</a>
<br/><a href="http://www.heliant.net/~stsai/code/content.php">http://www.heliant.net/~stsai/code/content.php</a>
<br/>펄로 된 서버들... 저는 실제로 펄 서버를 사용해봐서 느껴봤는데, 교육적인 목적 외에는, 20명 이상 동시 접속에서는 별로 좋지 않습니다.
<br/>
<br/>상용 서버
<br/><a href="http://www.electro-server.com/">http://www.electro-server.com/</a>
<br/>Electroserver 3.0
<br/>http://www.electrotank.com/ 의 대형 사이트를 제작하는데 사용된 서버입니다. 상당히 고가이며, 서버 방식도 oregano나 unity와는 달리 nonblocking io를 사용하기 때문에 대량 connection(즉 2,3,4,5 천명)이 가능합니다. 가장 professional 한 서버이나 가장 고가입니다. 무료 버젼은 20 user 까지 지원합니다. 많은 예제가 있고, 질답 포럼 및 타 서버에 비해 많은 개발자들이 사용하는걸로 알고 있습니다.
<br/>
<br/><a href="http://www.moock.org/unity/">http://www.moock.org/unity/</a>
<br/>Unity 2.0
<br/>Moocke, O'reilly actionscript 책 저자가 만든 socket 서버입니다. 이것도 java로 되어 있으며, 테스트 버젼은 5 user 까지 지원합니다. 같은 사이트에서 채팅방 및 아바타 채팅 소스 코드를 판매하고 있습니다. (개인적으로 판매하고 있는 채팅방은 별로 마음에 안 듭니다) 상당히 많이 알려진 서버입니다.
<br/>
<br/><a href="http://www.smartfoxserver.com">http://www.smartfoxserver.com</a>
<br/>가장 최근에 나온 사용 서버 중의 하나임. Lite, basic, pro로 나누어져 있어, electroserver나 unity에 비해 저렴합니다. Nonblocking io를 사용하기 때문에 제작자들은 oregano, unity, electroserver에 비해 더 많은 접속자를 버틸 수 있다고 주장합니다. Lite 버젼은 무료로 50 user 지원되며, 무료 사용 서버 버젼중에서는 가장 많은 user를 지원하는 듯합니다. 제작자들은 홈페이지 업데이트/커뮤너티 활성화에 노력하는 것 같습니다. 많은 강좌/예제가 있습니다. 실제 이용하는 사이트는 제 생각에 electroserver나 unity에 비해 아직은 다소 떨어질 듯합니다.