[TIL_Carrotww] 65 - 22/12/05

μœ ν˜•μ„Β·2022λ…„ 12μ›” 5일
0

TIL

λͺ©λ‘ 보기
77/138
post-thumbnail

πŸ“Carrotww의 μ½”λ”© 기둝μž₯

🧲 Django Channels 각쒅 μ—λŸ¬ onopen

πŸ” javascript socket onopen
ν”„λ‘ νŠΈμ™€ λ°±μ—”λ“œ κ°„λ‹¨ν•œ 메세지 전솑 ν…ŒμŠ€νŠΈ 쀑

Uncaught InvalidStateError: Failed to execute 'send' on 'WebSocket': Still in CONNECTING state

μœ„μ™€ 같은 μ—λŸ¬ 메세지가 λ‚˜μ™”λ‹€.
λ‹€μ–‘ν•œ λ°©μ‹μœΌλ‘œ λ‘œμ§μ„ κ΅¬ν˜„μ€‘μ΄μ—¬μ„œ μ°ΎλŠ”λ° 쑰금 κ±Έλ ΈλŠ”λ° μ΄μœ λŠ” λ‹¨μˆœν–ˆλ‹€.
λ‚˜μ˜ μ½”λ“œκ°€ μ†ŒμΌ“μ„ μ—΄μ–΄μ€€ ν›„ λ°”λ‘œ 메세지λ₯Ό μ „μ†‘ν•˜λ €κ³  ν•΄μ„œ κ·Έλž¬λ‹€ ... γ… 

ν•˜μ—¬ μœ„μ™€κ°™μ΄ onopen ν•¨μˆ˜λ‘œ μ†ŒμΌ“μ΄ μ—΄λ¦΄λ•ŒκΉŒμ§€ κΈ°λ‹€λ €μ£Όλ©΄ 메세지 전솑 μ‹œ μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€.

ν…ŒμŠ€νŠΈ κ³Όμ •μ—μ„œ λ°œμƒν•œ μ—λŸ¬μ§€λ§Œ 잘 생각해보면 μ†ŒμΌ“μ„ μ—΄μžλ§ˆμž 메세지λ₯Ό λ°”λ‘œ μ „μ†‘ν•˜λŠ”κ²ƒμ€ μ‹€μ‹œκ°„ μ±„νŒ…μ—μ„œ μΌμ–΄λ‚˜μ„œλŠ” μ•ˆλœλ‹€.
메세지 전솑 λ²„νŠΌμ— μ†ŒμΌ“ μ˜€ν”ˆ μ½”λ“œκ°€ λ™μ‹œμ— 있으면 계속 μ†ŒμΌ“μ΄ 열릴 수 있기 λ•Œλ¬Έ, λ¬Όλ‘  μ˜ˆμ™Έ 처리λ₯Ό ν•΄μ£Όλ©΄ λ˜μ§€λ§Œ ν•¨μˆ˜λ₯Ό λ‚˜λˆ„μ–΄ κΉ”λ”ν•˜κ²Œ μ§œλŠ” 것이 더 μ’‹κ² λ‹€κ³  생각됐고, onopen은 챗봇 μ•Œλ¦Όκ³Ό 같은 κΈ°λŠ₯은 μ‚¬μš©ν•˜μ§€ μ•Šμ„κΉŒ? λΌλŠ” 생각을 ν–ˆλ‹€.
μ‹€μ‹œκ°„ μ±„νŒ…μ΄ κ΅¬ν˜„λ˜λ©΄ μ•Œλ¦ΌκΈ°λŠ₯을 λ°”λ‘œ κ΅¬ν˜„ν•΄λ΄μ•Όκ² λ‹€.

🧲 Django Channels database create μ‹œ reload

πŸ” code

@database_sync_to_async
def create_chat_log(self, room_id, sender, content):
	RoomMessage.objects.create(room=room_id, user=sender, content=content)

sender = await self.get_user_db(sender_id)
receiver = await self.get_user_db(receiver_id)
room_object = await self.get_chatroom_db(room_id)

await self.create_chat_log(room_object, sender, message)

원인쑰차 μ°ΎκΈ° μ–΄λ €μ› λ˜ μ—λŸ¬μ΄λ‹€ λ°”λ‘œ websocket 연결이 끊겨 μ–΄λ””μ„œ 잘λͺ»λλŠ”지 찾을 μˆ˜λ„ μ—†μ—ˆμ§€λ§Œ, DBλ₯Ό λ§Œλ“  직후에 λ‚œ μ—λŸ¬μΈμ§€λΌ DBμͺ½μ΄λΌ μ§κ°ν•˜κ³  ν•œμ€„ μ”© μ§€μ›Œκ°€λ©° μ°Ύμ•˜λ‹€.
database 비동기 처리λ₯Ό ν•΄μ£Όμ—ˆλŠ”λ° λ°±μ—”λ“œμ—μ„œ DB createκ³Όμ •μ—μ„œ λŠκ²Όλ‹€.
아직 μ΄μœ λŠ” λͺ¨λ₯΄κ² λ‹€.. γ… 
내일 λ°”λ‘œ 찾아봐야겠닀..

🧲 Channels μ΄ν•΄ν•˜κΈ°

πŸ” Channels Layers

Channelsλ₯Ό μ†Œκ°œν• λ•Œ λŒ€ν‘œμ μΈ 그림이닀.

  • channel은 메세지λ₯Ό 보낼 수 μžˆλŠ” μš°νŽΈν•¨ 같은 κ°œλ…μ΄λ‹€. 각 채널은 이름이 있으며 λˆ„κ΅¬λ“ μ§€ 채널에 메세지λ₯Ό 전솑할 수 μžˆλ‹€ - λ¬Όλ‘  인증과정을 κ±°μΉ˜λŠ” 방법도 μžˆλ‹€.
  • group도 이름을 가지며 κ·Έλ£Ή 이름을 가진 μ‚¬μš©μžλŠ” κ·Έλ£Ήμ—μ„œ 채널을 μΆ”κ°€ 및 μ‚­μ œλ₯Ό ν•  수 있으며 그룹의 채널에 메세지λ₯Ό 보낼 수 μžˆλ‹€.

즉 μ„œλ²„μ—μ„œ 메세지λ₯Ό λ°›μœΌλ©΄ room 이름에 따라 group으둜 forwarding ν•œ ν›„ κ·Έλ£Ήμ—μ„œ ν•΄λ‹Ή 채널 λ ˆμ΄μ–΄μ— 메세지λ₯Ό μ „μ†‘ν•˜κ²Œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄ λœλ‹€.

profile
Carrot_hyeong

0개의 λŒ“κΈ€