인프런 커뮤니티 질문&답변

odh0112님의 프로필 이미지

작성한 질문수

파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편

(실습) 초간단 Echo 웹소켓 구현

템플릿 응답 관련해 문의드립니다.

23.01.07 15:35 작성

·

264

0

 안녕하세요 강사님 :))

다름이 아니라 강의 내용에서 ws.send() 및 ws.onmessage() 관련해 문의드립니다.

서버 구동 후 웹에서 ws.send("hello") 하게 되면 undefined만 뜨게 되고, ws.onmessage("hello")를 하게 되면 event 자체는 hello가 뜨는데, event.data는 undefined 만 출력됩니다.

여기서 궁금한 부분이 2가지가 있는데요!

  1. send()로 연결 지었을 때 onmessage()로 연결되게끔 하는 추가 설정이 필요한건지?

  2. event 자체는 입력한 문자열이 출력되는데, event.data는 undefined가 나오는 이유가 무엇인지

이렇게 두 가지 질문드립니다.

감사합니다. 새해 복 많이 받으세요~ :))

답변 1

0

이진석님의 프로필 이미지
이진석
지식공유자

2023. 01. 07. 17:41

안녕하세요.

  1. ws.onmessage 속성으로 함수만 등록하면, 웹소켓 서버로부터 메세지 수신 시에 그 함수가 호출됩니다. 별도의 추가 설정은 없습니다.

  2. onmessage 속성으로 설정하신 함수에 event 인자를 어떻게 받으셨는 지, 코드를 보여주시고 undefined가 뜨는 화면도 캡처해서 보여주시겠어요? onmessage 함수의 첫번째 인자는 이벤트 객체이기 때문에 입력한 문자열이 그대로 출력되는 것은 좀 이상합니다. 만약 event가 문자열인 경우, 문자열에는 .data 속성이 없기 때문에 참조 시에 undefined가 뜰 텐데요. event가 문자열이라면 인자를 받을 때 잘못 받으신 것은 아닐까 싶거든요. 코드와 에러 화면을 캡처해서 보여주세요.

화이팅입니다. :-)

odh0112님의 프로필 이미지
odh0112
질문자

2023. 01. 08. 19:00

요청하신 코드와 undefined 뜨는 부분은 다음과 같습니다!
썸네일 이미지가 작아 새 탭에서 이미지 열기 하시면 크게 보실 수 있습니다!

이진석님의 프로필 이미지
이진석
지식공유자

2023. 01. 08. 19:18

onmessgae 함수는 직접 호출하는 것이 아니라, 웹소켓 서버에서 메세지를 수신하면 자동 호출됩니다.

onmessage 함수를 직접 호출하시면서 이때 문자열을 인자로 넘기셔서, 문자열에서 .data 속성으로 접근하니 undefined가 뜨는 것입니다.

웹프론트엔드 단에서 send를 했는 데, 웹소켓 서버에서 응답을 받지 못해서 onmessage가 자동호출이 안 된 듯 합니다.

EchoCunsumer 코드도 보여주시겠어요?

odh0112님의 프로필 이미지
odh0112
질문자

2023. 01. 08. 20:53

강사님 제가 EchoCunsumer 코드 부분을 오버라이딩 그대로 사용해서 일어났던 문제였습니다ㅠㅠ 강사님 코드 똑같이 따라하니 지금은 정상 작동 하는거 확인했습니다!

주말인데도 빠르게 답변 달아주셔서 감사합니다 :))

이진석님의 프로필 이미지
이진석
지식공유자

2023. 01. 08. 21:14

잘 해결되셨다니 다행입니다.

화이팅입니다. ;-)

odh0112님의 프로필 이미지

작성한 질문수

질문하기