HTML5에서 WebSocket이라는 것을 지원하는데, 보면 그냥 우리가 일반적으로 쓰는 TCP형태의 소켓이 아니라 http와 같이 ws라는 프로토콜을 이용해서 통신하는 것 같습니다.

일단 pywebsocket사이트입니다.
http://code.google.com/p/pywebsocket/
이곳에서 0.5버전이 있는데, 그것을 받습니다.

설치하고 삽질해보려면 python이 필요합니다.
http://www.python.org/download/
파이썬을 잘 몰라서 그런데, 왜 버전이 두개로 나눠져있죠?-_- 2.6.5랑 3.1.2로 2.x버전과 3.x버전이 나눠서 그것도 2.x대 버전이 지속적으로 업데이트를 하고 있어요... 궁금하네.
일단 저는 2.6.5를 설치했습니다.
그리고 파이썬을 path에 잡아줍니다. 어디서든 실행해야하거든요.
Windows7기준으로 제어판 -> 시스템 -> 고급시스템설정 -> 환경변수에 있는 path에 python실행 경로를 추가하면 됩니다.

설치는 readme파일에 나온 것 처럼 그냥 build하고 install하면 된다는....
python setup.py build
하면 module파일들이 생성되고,
python setup.py install
하면 파이썬에 모듈을 설치하는 듯.

아...일단 이 모듈을 아파치와 연동해서 사용하는 방법이 있구요. 혼자서 테스트하며 띄울 수 있는 방법이 있네요. 일단 그냥 테스트해볼꺼니까 standalone모드로...

src/mod_pywebsocket폴더에 가면 standalone.py파일이 있는데, 실행하면 됩니다.
python standalon.py -w ../example/
상위에 있는 example폴더를 소켓에 올리는데, 파일 네이밍으로 소켓url을 정하게 되는 것 같습니다(?).
example에 echo_wsh.py파일이 있는데, ws://localhost/echo 로 요청하면 되더라구요.
거기에 있는 echo_client.py는 뭐하는 놈인지 모르겠네요ㅠㅠ
어쨌든 이제 브라우저코드를....

[code]
<!doctype html>
<html>
    <head>
        <meta charset="EUC-KR">
        <title>WebSocket Echo</title>
        <script type="text/javascript" src="jquery-1.4.2.min.js"></script>
        <script>
            var ws;
            $(document).ready(function(){
                if ("WebSocket" in window){
                    ws = new WebSocket("ws://localhost/echo");
                    ws.onopen = function(){
                        ws.send("message to send");
                    }
                    ws.onmessage = function(e){
                        $("#result").append(e.data + "<br />");
                    }
                    ws.onclose = function(){
                        // close
                    }
                }
               
                $("#btnConfirm").click(function(){
                    if (!ws)
                        return;
                    ws.send($("#textMessage").val());
                });
                $("#textMessage").keyup(function(e){
                    if (e.keyCode == 13){
                        if (!ws)
                            return;
                        ws.send($(this).val());
                        $(this).val("");
                    }
                });
            });
        </script>
      </head>
    <body>
        <input type="text" id="textMessage" />
        <input type="button" id="btnConfirm" value="전송"/>
        <div id="result"></div>
      </body>
</html>
[/code]
쉬운 코딩은 역시 jquery...
WebSocket을 만들고, send로 보내고, onmessage이벤트로 수신받습니다. 아직 크롬에서 밖에 안됨-_-

예제 사이트도 있습니다.
http://code.google.com/p/websocket-sample/
다른 건 안보고 채팅예제만 좀 봤는데, tcp소켓처럼 하는 방식은 아니더군요.
보니까 서버에 파일을 하나 생성해서 한쪽에서 메세지를 던지면 파일에 쓰고, 다른 한쪽은 계속 그 파일을 주시하다가 변경되었으면 그걸 이용해서 연결된 쪽에 메세지를 전달하는 형태로 구현이 되어있습니다.


 
Posted by 머드초보

댓글을 달아 주세요

  1. 나그네 2010.06.08 14:17  댓글주소  수정/삭제  댓글쓰기

    따라하다가 잘 몰라서 그러는데요..
    "파이썬을 path에 잡아줍니다"는 만약 파이썬 2.5를 깔았다면 C:\Python25\python.exe 를 Path로 잡아주라는 말씀이시져?


    두 번째로
    "python setup.py build "는 CMD 창에 쓰라는 말씀이신가여??

    • 머드초보 2010.06.14 12:01  댓글주소  수정/삭제

      네네~ 맞아요~ python을 어디서든 실행하기 위함이죠!
      네 cmd창에서 해당 폴더에서 치면 됩니다^^

  2. 행인 2010.08.17 09:26  댓글주소  수정/삭제  댓글쓰기

    파이썬의 버전이 나뉘어있고, 구버전이 계속 꾸준히 업데이트되는 이유는, 2버전의 파이썬과 3버전의 파이썬의 문법이 다른부분이 꽤 있는데다, 모듈들이 2버전을 기준으로 작성된 경우가 많아 실제로 현업에서도 2를 아직까지 많이 쓴다고들 합니다.

    예를들어 python 2에서는 print가 함수가 아니라 state로 처리되고있으나, 3버전에서는 함수로 바뀌었다고 하더군요.

  3. ㅠㅠ 2010.09.08 13:48  댓글주소  수정/삭제  댓글쓰기

    아파치랑 연동하는 법은 어떻게 하는건가요??ㅠ

  4. BlogIcon 강부자아들 2011.07.14 13:39  댓글주소  수정/삭제  댓글쓰기

    C:\Python25\Lib\site-packages\mod_pywebsocket
    C:\Python25\Lib\site-packages\example
    이렇게 된 폴더 구조에서

    python standalon.py -w ../example/ 이렇게 서버를 구동하시면
    example 폴더 밑에 웹소켓 핸들러(websock_handlers)가 호출되게 됩니다.
    이 때 서버에서, websock_handlers는 클라이언트에서 입력받은 ws://localhost/echo를 토대로 echo+"_wsh.py"를 호출합니다.
    제가 다운받은 예제 example 폴더 밑에는 bench_wsh.py가 있는데 이 때는 javascript에서 웹소켓 호출 시에 ws://localhost/bench 라고 url을 넣어 주시면 됩니다.

    그리고 또 한가지!
    브라우저 코드는 C:\Python25\Lib\site-packages\mod_pywebsocket 폴더 밑에 넣어야지 접속할 수 있습니다. example폴더에 넣으시면 동작하지 않습니다.
    예를 들어 C:\Python25\Lib\site-packages\mod_pywebsocket\test.html과 같은 경로는
    http://localhost/test.html 과 같은 url로 접근할 수 있습니다.

  5. BlogIcon 강부자아들 2011.07.14 14:13  댓글주소  수정/삭제  댓글쓰기

    Apache HTTP Server없이 사용하려면 이 standalone.py 서버를 mod_pywebsocket을 실행하기 위해 사용하여라.

    사용법:
    python standalone.py [-p <ws_port>] [-w <websock_handlers>]
    [-s <scan_dir>]
    [-d <document_root>]
    [-m <websock_handlers_map_file>]
    ... for other options, see _main below ...

    <ws_port> 는 ws:// connection을 위해 사용할 포트 번호.

    <document_root>는 HTML파일의 루트 디렉토리의 경로

    <websock_handlers>는 WebSocket handler의 루트 디렉토리의 경로
    참고로 <websock_handlers>의 세부사항에 대해 알고 싶거나 WebSocket handler를 작성하는 법이 궁금하다면 __init__.py의 코드를 보아라. 만약 경로가 상대경로로 되어 있으면 <document_root>가 기본 경로로 잡힐 것이다.


    <scan_dir>는 루트 리렉토리의 하위 경로 있고, <scan_dir>에 옵션 값을 지정하면 handler는 오직 scan_dir만 검색할 것이다. 스캐닝 검색 시간을 줄일 때 유용한 옵션이다.
    <websock_handlers_map_file>은 <document_root>가 기본 경로이다. –m 옵션을 지정함으로써 동작하게 할 수 있다. 샘플 맵핑파일은 example폴더 밑에 handler_map.txt로 존재한다.
    사용법은 ‘웹소켓_핸들러_별칭’ 공백 ‘실제_리소스_경로’와 같은 식으로 호출한다. 예를 들어
    / /echo
    와 같이 호출하면 / 를 /echo핸들러에 매핑시킨다. 즉 ws://localhost/는 ws://localhost/echo와 같다는 말이다.


    주의:
    이 standalone 서버는 SocketServer.ThreadingMixIn를 상속 받았기 때문에 각각의 요청마다 쓰레드를 생성한다.


    보안 유의사항: 이 서버는 CGIHTTPServer를 사용하고 CGIHTTPServer는 보안상 안전하지 않다.
    CGIHTTPServer는 임의의 파이썬 코드를 수행하거나 외부 프로그램을 동작시킬 수 있으므로 이 CGIHTTPServer는 방화벽 내에 두어야 한다.

  6. 강부자아들 2011.09.19 13:07  댓글주소  수정/삭제  댓글쓰기

    # -*- coding: utf-8 -*-
    위 내용을 파이썬 핸들러 코드에 넣어야지 utf-8로 인식되어
    파이썬 핸들러가 정상적으로 동작합니다.