Internals

κ°œλ…

WRPλŠ” Protobuf μ„œλΉ„μŠ€μ— 톡신 κΈ°λŠ₯을 μ œκ³΅ν•˜κΈ° μœ„ν•œ ν”„λ‘œν† μ½œμž…λ‹ˆλ‹€.
ν”Œλž«νΌλ§ˆλ‹€ ν”„λ‘œν† μ½œμ„ 각각 λ”°λ‘œ λ§Œλ“œλŠ” λŒ€μ‹  ν”„λ‘œν† μ½œμ„ μ—¬λŸ¬ λ‹¨κ³„λ‘œ 좔상화 ν•˜μ—¬, μ†ŒμΌ“μ„ μ œμ™Έν•œ λ‚˜λ¨Έμ§€ κ°œλ…μ˜ κ΅¬ν˜„μ€ λͺ¨λ“  ν”Œλž«νΌμ—μ„œ κ³΅μœ ν•  수 μžˆλ„λ‘ μ„€κ³„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

단방ν–₯ 톡신을 μ œκ³΅ν•˜λŠ” μ†ŒμΌ“κ³Ό 채널이 μžˆμŠ΅λ‹ˆλ‹€.

  • μ†ŒμΌ“: 두 ν”Œλž«νΌ κ°„ λ°”μ΄λ„ˆλ¦¬ 데이터λ₯Ό μ†‘μˆ˜μ‹ ν•©λ‹ˆλ‹€.
  • 채널: μ†ŒμΌ“μ„ μ΄μš©ν•΄ 메세지 λ‹¨μœ„μ˜ 정보λ₯Ό μ†‘μˆ˜μ‹ ν•©λ‹ˆλ‹€.

채널을 μ΄μš©ν•΄ μš”μ²­κ³Ό 응닡 κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” κ²ŒμŠ€νŠΈμ™€ ν˜ΈμŠ€νŠΈκ°€ μžˆμŠ΅λ‹ˆλ‹€.

  • 게슀트: ν˜ΈμŠ€νŠΈμ—κ²Œ νŠΉμ • κΈ°λŠ₯을 μš”μ²­ν•©λ‹ˆλ‹€.
  • 호슀트: κ²ŒμŠ€νŠΈλ‘œλΆ€ν„° 온 μš”μ²­μ„ μ²˜λ¦¬ν•˜κ³  κ²°κ³Όλ₯Ό μ‘λ‹΅ν•©λ‹ˆλ‹€.

각 ν”Œλž«νΌ(Web, iframe, iOS, Android)은 μ œκ³΅ν•˜λŠ” μ €μˆ˜μ€€ API의 ν˜•νƒœμ™€ 톡신 방법이 λ‹€λ₯΄λ―€λ‘œ μ΄λŸ¬ν•œ ν”Œλž«νΌ 쒅속적인 방법에 따라 μ†ŒμΌ“μ„ κ΅¬ν˜„ν•˜λŠ” Glueκ°€ μ‘΄μž¬ν•©λ‹ˆλ‹€.

  • Glue: μ†ŒμΌ“μ„ κ΅¬ν˜„ν•˜κΈ° μœ„ν•œ ν”Œλž«νΌ 쒅속적인 μ½”λ“œλ₯Ό μΌμ»«μŠ΅λ‹ˆλ‹€.

μ΄λŸ¬ν•œ κ°œλ…μ˜ κ΅¬ν˜„μ²΄λ“€μ€ WRPλ₯Ό μ‚¬μš©ν•˜λŠ” 톡신 주체간에 ν•˜λ‚˜μ”©λ§Œ μ‘΄μž¬ν•΄μ•Ό ν•©λ‹ˆλ‹€.
데이터/메세지가 μΈμŠ€ν„΄μŠ€κ°„μ— κ³΅μœ λ˜μ§€ μ•Šκ³  μ†Œλͺ¨λ˜λŠ” νŠΉμ„±μ΄ μžˆμœΌλ―€λ‘œ μ†ŒμΌ“μ΄λ‚˜ μ±„λ„μ˜ μœ μΌμ„±μ΄ 보μž₯λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

메세지

채널을 톡해 μ „λ‹¬λ˜λŠ” λ©”μ„Έμ§€λŠ” WrpMessage둜 λΆ€λ₯΄λ©°, 이 메세지도 Protocol Buffers둜 μ •μ˜λ˜μ–΄ 인/λ””μ½”λ”©λ©λ‹ˆλ‹€.
WrpMessage.proto

νƒ€μž…

각 λ©”μ„Έμ§€μ˜ νƒ€μž…μ€ λ‹€μŒκ³Ό 같은 상황을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

  • HostInitialize: ν˜ΈμŠ€νŠΈκ°€ μ—°κ²° 수립 μ‹œ, κ²ŒμŠ€νŠΈκ°€ μš”μ²­ν•  수 μžˆλŠ” λ©”μ†Œλ“œλ“€μ„ λ³΄λƒ…λ‹ˆλ‹€.
  • HostError: ν˜ΈμŠ€νŠΈκ°€ μ—λŸ¬λ₯Ό λ§ˆμ£Όν•œ 경우 λ³΄λƒ…λ‹ˆλ‹€.
  • GuestReqStart: κ²ŒμŠ€νŠΈκ°€ μš”μ²­μ„ μ‹œμž‘ν•©λ‹ˆλ‹€. μš”μ²­μ„ 식별할 수 μžˆλŠ” id와 μ›ν•˜λŠ” λ©”μ†Œλ“œλ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.
  • GuestReqPayload: κ²ŒμŠ€νŠΈκ°€ νŠΉμ • id에 ν•΄λ‹Ήν•˜λŠ” μš”μ²­μ˜ λ‚΄μš©(payload)을 λ³΄λƒ…λ‹ˆλ‹€.
  • GuestReqFinish: κ²ŒμŠ€νŠΈκ°€ μš”μ²­μ— λŒ€ν•œ λͺ¨λ“  λ‚΄μš©μ„ λ³΄λƒˆμŠ΅λ‹ˆλ‹€.
  • HostResStart: ν˜ΈμŠ€νŠΈκ°€ 응닡을 μ‹œμž‘ν•©λ‹ˆλ‹€.
  • HostResPayload: ν˜ΈμŠ€νŠΈκ°€ μ‘λ‹΅μ˜ λ‚΄μš©μ„ λ³΄λƒ…λ‹ˆλ‹€.
  • HostResFinish: ν˜ΈμŠ€νŠΈκ°€ 응닡에 λŒ€ν•œ λͺ¨λ“  λ‚΄μš©μ„ λ³΄λƒˆμŠ΅λ‹ˆλ‹€.
  • GuestResFinish: κ²ŒμŠ€νŠΈκ°€ 응닡을 더 이상 μ›ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

큰 λ§₯락 νλ¦„μ—μ„œ μ–΄λ–€ 메세지 νƒ€μž…μ΄ μ „λ‹¬λ˜λŠ”μ§€ ν™•μΈν•˜λ €λ©΄ μ•„λž˜ 이미지λ₯Ό μ°Έκ³ ν•˜μ„Έμš”.

ν”„λ ˆμž„

WrpMessageλŠ” μ†ŒμΌ“μ—μ„œ μ „λ‹¬λ˜κΈ° μœ„ν•΄ 이진 λ°μ΄ν„°λ‘œ λ³€ν™˜λ˜λ©΄μ„œ μƒˆλ‘œμš΄ ν˜•νƒœλ₯Ό κ°€μ§‘λ‹ˆλ‹€. 이진 데이터가 μŠ€νŠΈλ¦¬λ°λ˜λŠ” 경우 λ°μ΄ν„°μ˜ μ‹œμž‘κ³Ό 끝을 μ•ŒκΈ° μ–΄λ €μš°λ―€λ‘œ, λ©”μ„Έμ§€μ˜ μ‹œμž‘ λΆ€λΆ„ 4λ°”μ΄νŠΈμ— WrpMessageκ°€ 이진 ν˜•νƒœλ‘œ μΈμ½”λ”©λ˜μ—ˆμ„ λ•Œμ˜ 길이 정보λ₯Ό κΈ°λ‘ν•©λ‹ˆλ‹€.

wrp channel packet diagram