WebSocket

λ“±μž₯ λ°°κ²½

HTTP ν”„λ‘œν† μ½œμ„ μ΄μš©ν•œ 톡신은 기본적으둜 단방ν–₯이닀. Clientλ‘œλΆ€ν„° μƒμ„±λœ Request Packet이 μ„œλ²„μ—κ²Œ μ „λ‹¬λ˜λ©΄, μ„œλ²„λŠ” 이에 λŒ€ν•œ Reseponse Packet을 μ œκ³΅ν•˜λŠ” λ°©μ‹μœΌλ‘œ 톡신이 이루어진닀.

μ΄λŸ¬ν•œ 단방ν–₯ ν†΅μ‹ μ˜ 단점은 μ„œλ²„μ— λ³€ν™”κ°€ μžˆλ”λΌλ„, λ°˜λ“œμ‹œ ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­μ„ ν•΄μ•Ό ν•΄λ‹Ή λ³€ν™”λ₯Ό 확인할 수 μžˆλ‹€λŠ” 것이닀. μ›Ήμ†ŒμΌ“μ€ μ„œλ²„κ°€ μš”μ²­ 없이도 ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 데이터λ₯Ό 전솑할 수 μžˆλ„λ‘ μ–‘λ°©ν–₯ 톡신 ν™˜κ²½μ„ μ œκ³΅ν•¨μœΌλ‘œμ¨ μ΄λŸ¬ν•œ 단점을 ν•΄κ²°ν•œλ‹€.

WebSocket (μ›Ήμ†ŒμΌ“)

μ •μ˜

μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ κ°„ μ–‘λ°©ν–₯ 톡신을 μœ„ν•œ ν”„λ‘œν† μ½œ

ws://둜 μ‹œμž‘ν•˜λ©°, TCP/IP 기반으둜 λ™μž‘ν•œλ‹€.

λ™μž‘ 원리

  1. ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ—κ²Œ ν•Έλ“œμ‰μ΄ν‚Ή(websocket 연결을 μœ„ν•œ ν˜‘μƒ)에 ν•΄λ‹Ήν•˜λŠ” HTTP μš”μ²­ 전솑

    GET /chat HTTP/1.1
    Host: example.com:8000
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
    Sec-WebSocket-Version: 13
    • HTTP 1.1 μ΄μƒμ˜ 버전을 μ‚¬μš©ν•΄μ•Ό 함

    • HTTP λ©”μ†Œλ“œλŠ” λ°˜λ“œμ‹œ GET

    • Upgrade: websocket 헀더λ₯Ό 포함

    • Connection: Upgrade 헀더λ₯Ό 포함

    • ν΄λΌμ΄μ–ΈνŠΈ/μ„œλ²„ κ°„ 인증을 μœ„ν•œ Sec-WebSocket-Key 헀더λ₯Ό 포함

    • μ„œλ²„κ°€ μ›Ήμ†ŒμΌ“ 버전을 인식할 수 μ—†λŠ” 경우 버전 λͺ…μ‹œλ₯Ό μœ„ν•΄ Sec-WebSocket-Version 헀더λ₯Ό 포함

  2. μ„œλ²„λŠ” 1번 μš”μ²­μ— λŒ€ν•œ 응닡을 전솑

    // Success
    HTTP/1.1 101 Switching Protocols
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
    • μ΄μ œλΆ€ν„° μ›Ήμ†ŒμΌ“ ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•  κ²ƒμ΄λΌλŠ” μƒνƒœ μ½”λ“œ 101을 μ‚¬μš©

    • λ§ˆμ°¬κ°€μ§€λ‘œ Upgrade, Connection 헀더λ₯Ό 포함

    • ν΄λΌμ΄μ–ΈνŠΈμ˜ Sec-WebSocket-Key 값을 맀직 슀트링과 이어 뢙이고 SHA-1 ν•΄μ‹œ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ μ•”ν˜Έν™”ν•˜κ³  base64둜 μΈμ½”λ”©ν•œ 값을 담은 Sec-WebSocket-Accept 헀더λ₯Ό 포함

    // Fail
    HTTP/1.1 400 Bad Request
    • λ§Œμ•½ 연결에 μ‹€νŒ¨ν–ˆλ‹€λ©΄ μ„œλ²„λŠ” μ¦‰μ‹œ 400을 λ°˜ν™˜ν•˜κ³  μ¦‰μ‹œ μ†ŒμΌ“μ„ μ’…λ£Œν•΄μ•Ό 함

  3. μ„±κ³΅μ μœΌλ‘œ ν”„λ‘œν† μ½œμ΄ μ›Ήμ†ŒμΌ“(ws)으둜 λ³€κ²½λœ 경우, 이제 μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈλŠ” μ–Έμ œλ“  λ©”μ‹œμ§€λ₯Ό 전솑할 수 μžˆλ‹€. (즉, μ–‘λ°©ν–₯ 톡신을 ν•  수 μžˆλ‹€.)

Last updated