VoxImplantãã©ãããã©ãŒã ã¯ãã¯ã©ãŠããAPIãããŸããŸãªãã©ãããã©ãŒã çšã®SDKã®ããã€ãã®éšåã§æ§æãããŠããŸãã ãã©ãŠã¶SDKã¯WebSocketãä»ããŠã¯ã©ãŠãã«æ¥ç¶ããä»ã®VoxImplantãŠãŒã¶ãŒãšéåžžã®é»è©±ã®äž¡æ¹ãäœæïŒããã³çä¿¡ïŒã§ããããã«ããŸãã ããã¯ä»¥åã¯ãã©ãã·ã¥ã§åäœããŠããŸããããææ°ã®ãã©ãŠã¶ã¯WebRTCãã¯ãããžãŒã䜿çšããŠãããé³å£°ãšãããªã§åäœããããã«ç¹å¥ã«èšèšãããŠããŸãã è¯ãããšã§ããã䜿çšããã®ã¯éåžžã«å°é£ã§ãããã¯ãããžãŒã®éèŠãªãããããã®1ã€ã§ãããã¢ããŒãã¢éä¿¡ã®æ©èœã¯ãå®å
šã«æåã§å¶åŸ¡ãããŸãã 2ã€ã®ãã©ãŠã¶ãŒããã€ã¹ãã£ãããŸãã¯ãããªãã£ãããçžäºã«æŽçã§ããããã«ãéçºè
ã¯ã³ã³ãã¥ãŒã¿ãŒã®IPã¢ãã¬ã¹ã«é¢ããæ
å ±ãåéããäœããã®æ¹æ³ã§ãã®æ
å ±ããã©ãŠã¶ãŒéã§è»¢éããNATãã©ããŒãµã«ãå®è¡ããŠãã¹ãŠãWebRTCã«ãã£ãŒãããå¿
èŠããããŸãã ãŸããNATãåé¿ã§ããªãã£ãå Žåã¯ãããŒã¿è»¢éçšã®ãªã¬ãŒãµãŒããŒãæäŸããŸãã
æè¿ãã€ã³ã¿ãŒãããäžã§ãã©ãŠã¶éã®ãæ
å ±ã®è»¢éãã®æè¡çãªè©³çްãäŒããè峿·±ãèšäºãèŠã€ããŸããã 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ãœãªã¥ãŒã·ã§ã³ã䜿çšããããšãã§ããŸãã