리셋 되지 말자

[python 활용] websocket으로 json 송신, 수신 하기 본문

Python

[python 활용] websocket으로 json 송신, 수신 하기

kyeongjun-dev 2020. 4. 8. 12:05

websocket json 다루기

JSON을 쓰는이유?

-프로젝트를 진행하는데, websocket으로 오직 텍스트만 전달할 수 있어서 불편한 경우가 생겼다. 예를들어 어떤 text를 보내면 text마다 server에서 처리하는 기능을 다르도록 처리하는 경우(?)이다. 실제로 작년 websocket으로 웹 마피아 게임을 만들 때는 무슨 앞에 별을 붙이고, 달러표시를 붙여서 서버에서 각 특수문자마다 case별로 처리를 했던 뻘짓(?)을 했던 것 같다... 그때 json을 알았으면 좋았을걸....

client.html

<script>
  function sendMessage(){    
      //textarea객체를 id를 이용해 가져온다.
      var message = document.getElementById("textMessage");    

      //json 데이터 생성. type은 'message'로 지정하고 text는 textarea의 value로 지정
      var msg = {
            type : "message",
          text : message.value
      };
      //아래 설명 참고
      webSocket.send(JSON.stringify(msg));

      //textMessage객체의 값 초기화    
      message.value = "";    
    }
</script>

버튼을 클릭하면, 위의 함수가 실행되록하여 json형태의 데이터를 python 서버로 보내게 된다.

JSON.stringify() 함수

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
위의 사이트를 참고하면, 단순히 JSON데이터를 string으로 변환하는 역할을 하는 것을 알 수 있다.
그럼 서버에서는 어떻게 사용할 수 있을까?

server.py

    #websocket client로부터 문자열로된 json 데이터를 받는다.
    data = await websocket.recv();

    //json.loads에서 마지막 s는 string을 의미한다. string으로 표현된 json데이터형식을 json format으로 변경하여 jd에 담는다.
    jd = json.loads(data)

    //타입이 어떻게 되는지 확인
    print(type(data))
    print(type(jd))

    //결과 확인
    print('{}'.format(data))
    json_string = jd["text"]
    print(json_string)

실행 결과 (client에서 hello라는 문자열 입력)

[kkj@localhost ws_json]$ python3.7 json_test.py
<class 'str'>
<class 'dict'>
{"type":"message","text":"hello"}
hello

짠 json 다루기 완료.

Comments