æè¿ãã€ã³ã¿ãŒãããäžã§ãã©ãŠã¶éã®ãæ å ±ã®è»¢éãã®æè¡çãªè©³çŽ°ãäŒããèå³æ·±ãèšäºãèŠã€ããŸããã Habrã«é©åãã翻蚳-ç«ã®äžã§ã
ããã®ä¿¡å·ã¯ã©ãã«ããããã©ã³ã¹ããŒãã¬ãã«ã¯ã©ãã«ãããŸããïŒ
ãããã³ã«ãšããŠã®WebRTCã«ã¯ãã·ã°ããªã³ã°ãã¡ã«ããºã ãå«ãŸããŠããŸããã ããã¯ãéçºè ãšããŠãããªããèªåã§ãããã®äžè©±ãããå¿ èŠãããããšãæå³ããŸãã
æåã®ã¹ãããã¯ããããã³ã«ãéžæããããšã§ãã ããã«æ£ç¢ºã«èšããšããã©ã³ã¹ããŒããšã·ã°ããªã³ã°ã®2ã€ã®ãããã³ã«ã§ãã ã»ãšãã©ã®å Žåãéãã¯èŠãããŸããïŒãŸãã¯èŠãããããŸããïŒããéåžžã«éèŠãªå ŽåããããŸãã æè¿ãç§ã¯æçš¿ã®1ã€ã«ã€ããŠè³ªåãåããããã説æãæžãããã«ãªããŸããã
Webãã©ãŠã¶ãŒãšWebRTCãã©ã³ã¹ããŒããããã³ã«
ããããã€ã¹ããå¥ã®ããã€ã¹ã«ã¡ãã»ãŒãžãéä¿¡ããã«ã¯ããã©ã³ã¹ããŒããããã³ã«ãå¿ èŠã§ãã ãã®å Žåãã¡ãã»ãŒãžå ã®å 容ãã¡ãã»ãŒãžã®æ§é ã¯é¢ä¿ãããŸãããéä¿¡ã§ããããšã®ã¿ã§ãã ãããŠåãåã£ãã
HTTP / 1.1
5幎åããããã³ã«ã«ã€ããŠè©±ããšãããã©ãŠã¶ã¯ç°¡åã§ããã å®éãHTTP / 1.1ãšãã®äžã«ããXHRãSSEãBOSHãCometãšããŠç¥ããããã¹ãŠã®ãããã³ã°ããããŸããã ã¡ã«ããã¯ã®è©³çŽ°ã«èå³ãããå Žåã¯ãã³ã¡ã³ããæ®ããŠãã ããã以äžã®èšäºã§èª¬æãè©Šã¿ãŸãããã ããå°ãã°ãŒã°ã«ã§æ€çŽ¢ããã°ç°¡åã«èª¬æãèŠã€ããããšãã§ããŸãã
HTTP / 1.1æŸèæãšãšãã«ãœãªã¥ãŒã·ã§ã³ã°ã«ãŒããåŒã³åºããŸãã ãããã®ãœãªã¥ãŒã·ã§ã³ã¯HTTP / 1.1ã䜿çšããŸãããªããªããåœæã¯åã«ä»£æ¿æ段ããªãã£ãããã§ããããããæè¡çãªæå³ããªããªãæ¹æ³ã§ãããè¡ããŸãã
ã¯ããRESTã䜿çšã§ããŸãã ãããããããHTTP / 1.1ã«é¢é£ããå°ããªè©³çŽ°ã§ãã
ãã®åŸã3ã€ã®ãã¯ãããžãŒãç»å ŽããŸããïŒWebSocketãWebRTCããããŠæè¿ã§ã¯HTTP / 2ã
Webãœã±ãã
HTTP / 1.1ã§ã¯ã§ããªãããšãè¡ãããã«ãWebSocketãè¿œå ãããŸããã ã¯ã©ã€ã¢ã³ããšWebãµãŒããŒã®äž¡æ¹ãäºãã«ã¡ãã»ãŒãžãéä¿¡ã§ããåæ¹åã¡ã«ããºã ãæäŸããŸãã ãããã®ã¡ãã»ãŒãžã®çš®é¡ãæå³ããµããŒããã圢åŒã®çš®é¡-WebããŒãžéçºè ã決å®ããŸãã
socket.ioãŸãã¯ããŸã人æ°ã®ãªãSockJSããããŸãã ã©ã¡ããã䜿çšã§ããªãå Žåã«WebSocketããšãã¥ã¬ãŒãããã¯ã©ã€ã¢ã³ãåŽã®ã¡ã«ããºã ãæäŸããŸãã
WebSocketãããŸãæ©èœãããšããsocket.ioãšSockJSãçŽ æŽãããã§ãã ãã ããããŸãæ©èœããªãå ŽåããããŸãïŒããã«ã€ããŠã¯ãHTTP / 2ããŒãã§è©³ãã説æããŸãïŒã
WebRTCããŒã¿ãã£ãã«
ããçšåºŠãŸã§ãããŒã¿ãã£ãã«ã¯WebRTCã§ã·ã°ããªã³ã°ã«äœ¿çšãããŸãã
ã¯ã 䜿çšããIPã¢ãã¬ã¹ãããã³ãã®åã«ICEã䜿çšããããšã«åæããå¿ èŠããããŸãã ãã®ããã«ã¯ãè¿œå ã®ä¿¡å·ãšãã©ã³ã¹ããŒãã¬ãã«ãå¿ èŠã«ãªããŸãïŒãªã¹ãã¯ãã®æçš¿ã«ãããŸãïŒã æ¥ç¶ã確ç«ããåŸãããŒã¿ãã£ãã«ãä¿¡å·ã¬ãã«ãšããŠäœ¿çšã§ããŸãã
ããŒã¿ãã£ãã«ã䜿çšããŠã2ã€ã®ããã€ã¹éã§çŽæ¥ä¿¡å·ãéãããšããïŒã¿ã¹ã¯ã«å¿ããŠïŒä»²ä»è ãä»ããŠä¿¡å·ãéãããšãã§ããŸãã
ããŒã¿ãã£ãã«ããã©ã³ã¹ããŒããããã³ã«ãšããŠäœ¿çšããçç±
- ã·ã°ããªã³ã°ã®é 延ãæžãããŸãã çè«çã«ã¯ãããŒã¿ãã£ãã«ã¯ããªããã§ããæéã®ãã®ã§ãã
- ãµãŒããŒã®è² è·ãæžãããŸãã ããã§ã圌ã¯ã©ããã«ãªãã€ã¬ã¯ãããããã ãã«ãã¹ãŠã®ã¡ãã»ãŒãžãåä¿¡ããããšã¯ãããŸãã-ããªãã¯åœŒã®ããã«ç¹ã«æå³ãããŠãããã®ã圌ã«éä¿¡ããŸãã
- å人ããŒã¿ã®æ©å¯æ§/ã»ãã¥ãªãã£ã®ã¬ãã«ãäžããŸã-ãµãŒããŒãä»ããŠã¡ãã»ãŒãžãéä¿¡ããªãå Žåãããã¯åœŒãéä¿¡ãããŠãããã®ãèŠããªãããšãæå³ããŸã-ãŸãã¯äœããã®ã¡ãã»ãŒãžãèµ·ãã£ãŠããããšã«æ°ä»ããªãããšãæå³ããŸãã
ããããå®éã«ã¯ããã®ãªãã·ã§ã³ã¯ã»ãšãã©äœ¿çšãããŸããã WebRTCã®äžçã§ã¯ãDataChannelããŸã å©çšã§ããªããšãã«æ¥ç¶ã確ç«ãããåã«ããã©ã³ã¹ããŒãã¬ã€ã€ãŒãéèŠã§ãã ãŸãã1ã€ã®æ¥ç¶ã®DataChannelããã©ã³ã¹ããŒãã¬ã€ã€ãŒãšããŠäœ¿çšããŠå¥ã®æ¥ç¶ã«ä¿¡å·ãéãããšã¯å¥åŠã§ãã
HTTP / 2
ç§ã¯ãã§ã«HTTP / 2ã«ã€ããŠæžããŸãã ã ãããããã以æ¥ãHTTP / 2ã¯ããã«æ®åããããã«äººæ°ãé«ãŸã£ãŠããŸãã
HTTP / 2ã¯ãHTTP / 1.1ã«ååšããå€ãã®å¶éãåãé€ããŸãã ãããã£ãŠãè¿ãå°æ¥ãä¿¡å·ã¬ãã«ã®ãããã³ã«ã®åªããåè£ã«ãªãå¯èœæ§ããããŸãã
HTTP / 2ãWebSocketã®ããŒãºã«ã©ã®ããã«åœ±é¿ãããã«ã€ããŠã Alan Denisã詳ãã説æããŠããŸãã
WebRTCã·ã°ããªã³ã°ãããã³ã«
ãã·ã°ããªã³ã°ããšã¯ãèªåèªèº«ãè¡šçŸããå Žæã§ãã ãŸãã¯ããªãã®ãµãŒãã¹ã ãããŠãŒã¶ãŒãå¥ã®ãŠãŒã¶ãŒãšéä¿¡ã§ããããã«ããå¿ èŠããããŸãã ãŸãã¯ãä»®æ³ã«ãŒã ã«åå ãã人ã ã®ã°ã«ãŒããšã å¿ èŠãªã¡ãã»ãŒãžã®çš®é¡ãæå³ãå€èŠ³ãªã©ã決å®ããŸãã
ããã¯ä¿¡å·ãããã³ã«ã§ãã
転éãããã³ã«ãšã¯ç°ãªãããã©ãŠã¶ã§èš±å¯ãããŠãããã®ã§ã¯ãªããéæããããšããŠãããã®ã«ãã£ãŠå¶éãããŸãã
WebRTCã§ãã䜿çšããã3ã€ã®äž»èŠãªã·ã°ããªã³ã°ãããã³ã«ãæ€èšããŠãã ããã
äžå£
SIPã¯é»è©±ã®äžçããæ¥ãŸããã 圌ã®äž»ãªãã©ã³ã¹ããŒãã¯UDPã§ããã 次ã«ããã©ã³ã¹ããŒããããã³ã«ãšããŠTCPãšTLSãè¿œå ãããŸããã ãã®åŸãSCTPã¯èªèº«ãåŒãäžããŸããã ãã©ãŠã¶ãä»ããŠäœ¿çšããããšã¯ã§ããªããããããããç解ããããšã¯æå³ããããŸããã ãã®ãããWebSocketã¯SIPãã©ã³ã¹ããŒããšããŠè¿œå ãããåã«ãSIP via WebSocketããšåŒã°ããŸããã WebSocketçµç±ã®SIPã¯WebRTCïŒãŸã æšæºåãããŠããªãïŒã®åã«æšæºåãããŠããããšããããç¬èªã®RFCããã§ã«æã£ãŠããŸã ã äžèšã®ãã¹ãŠãéèŠãªã®ã¯ãªãã§ããïŒ WebSocketãä»ããSIPã®äœ¿çšã¯ãWebRTCã§ã®ã¿å¯èœã§ããããã§ãã
ããã¯SIPã«ã€ããŠã§ãã ãŸããSIPãç¥ã£ãŠããå ŽåãSIPãæããŠããå ŽåããŸãã¯å¿ èŠãªå Žåã¯ãWebRTCã®ã·ã°ããªã³ã°ãããã³ã«ãšããŠäœ¿çšã§ããŸãã
Xmpp
ç§ã¯XMPPãå«ãã§ãã
ãããããã®çç±ã¯ããããããŸããã ããããç§ã圌ã«ã€ããŠäœãæªãããšãèšããšããã¹ãŠã®çµéšè±ããªXMPPãã¡ã³/ãã©ãã¯ãŒ/çä¿¡è ãã³ã¡ã³ãã§åœŒãå®ãããã«æ¥ãããã§ãã ãããŠãããã¯ç§ãç¬ãããŸãã
XMPPã¯ãã¹ãŠããŠãŒã¶ãŒã¹ããŒã¿ã¹æ å ±ãšã¯ã€ãã¯ã¡ãã»ãŒãžã«çŠç¹ãåœãŠãŠããŸãã ããããå¯äžã®èŠä»¶ã§ããå Žåãç¹ã«éçºè ããã§ã«XMPPã䜿çšããŠäœãã§ããããç¥ã£ãŠããå ŽåãXMPPãæ¬åœã«åã¡ãŸãã
XMPPãæ°ã«å ¥ã£ãããã³ã¡ã³ãã«è¿ä¿¡ããããšãå¿ããªãã§ãã ãã-ããã¯äžã«ãããŸãã
æææš©
ç§ã¯ããŒãå«ãã§ãã ããã«ãããããããç¬èªã®ä¿¡å·ãããã³ã«ã«ã¯å€ãã®å©ç¹ããããŸãã
ãããŠãã®å Žåãããªãããããã®ã¯ã1人ã®ããŒãžã«2人ã®ãŠãŒã¶ãŒã眮ãã ãã§ãã ãããããŸããã ç§ã¯å€§å¹ ã«ç°¡çŽ åããããšãç¥ã£ãŠããŸãããåçŽåããªããšãäžè¬çãªãããã³ã«ã®åé·æ§ããã¹ãŠå¿ èŠã«ãªããŸãã
ä»ã®å€ãã®å Žåãã·ã°ããªã³ã°ãæäœããããã ãã«å¥ã®WebãµãŒããŒãè¿œå ããã®ã¯æ¬åœã«æãŸãããããŸããã 1ã€ã®ãµãŒããŒã§Webã¢ããªã±ãŒã·ã§ã³å šäœãåŠçããå¿ èŠããããŸãã ãããã£ãŠãç¬èªã®ä¿¡å·ã¬ãã«ã®ãããã³ã«ã«ãªããŸãã ããªãã¯ãããåŒã³åºãããšã¯ã§ããŸãããã ãŸãã¯ãä¿¡å·ã¬ãã«ã®ãããã³ã«ãšã¯èããªãã§ãã ããã
éžææ¹æ³ã¯ïŒ
åžžã«ã·ã°ããªã³ã°ãããã³ã«ã§éå§ããŸãã
ã€ã³ãã©ã¹ãã©ã¯ãã£ãããå ŽåããŸãã¯æ¥ç¶ããå€éšãµãŒãã¹ãããå Žåã¯ãSIPã䜿çšããå¿ èŠããããŸãã å¿ èŠããªãå Žåã¯ã¹ãããããŸãã
XMPPã奜ããªå ŽåããŸãã¯ãŠãŒã¶ãŒã¹ããŒã¿ã¹æ å ±ãšã¯ã€ãã¯ã¡ãã»ãŒãžã®æ©èœãå¿ èŠãªå Žåã¯ãããã䜿çšããŸãã
WebRTCãè¿œå ãããµãŒãã¹ãç¬èªã®ããžãã¯ãæã£ãŠããå Žåã¯ãæ¢ã«ã·ã°ããªã³ã°ãæã£ãŠããå¯èœæ§ããããŸãã ãããã£ãŠãå¿ èŠãªã¡ãã»ãŒãžãç¬èªã®ã·ã°ããªã³ã°ã«è¿œå ããã ãã§ãã
ä»ã®ãã¹ãŠã®å Žåãç§ã®ã¢ããã€ã¹ã¯ãèŠä»¶ãå®å šã«æºããç¬èªã®ä¿¡å·ãœãªã¥ãŒã·ã§ã³ã䜿çšããããšã§ãã ãã®ããã«SaaSãœãªã¥ãŒã·ã§ã³ã䜿çšããããšãã§ããŸãã