WebSocketïŒãŠã§ããœã±ããïŒã®ä»çµã¿ïŒãªã¢ã«ã¿ã€ã æ¥ç¶ã®å®å šãŠã©ãŒã¯ã¹ã«ãŒ
Webã®åææ®µéã§ã¯ããã©ãŠã¶ã¯ã·ã³ãã«ãªããã¥ã¡ã³ããã¥ãŒã¢ã«éããŸããã§ãããããŒãžããªã¯ãšã¹ããããšããµãŒããŒããããã¬ã³ããªã³ã°ããæ¥ç¶ãéããããŠããŸããããã®ããªã¯ãšã¹ãã»ã¬ã¹ãã³ã¹ãã®ãµã€ã¯ã«ã HTTP (Hypertext Transfer Protocol) ã®æ žå¿ã§ãã
ããããWebã¢ããªã±ãŒã·ã§ã³ããªã¢ã«ã¿ã€ã ãã£ãããã©ã€ãã®æ ªäŸ¡è¡šç€ºãå
±åç·šéããã«ããã¬ã€ã€ãŒã²ãŒã ãªã©ã®ãªããã§ã€ã³ã¿ã©ã¯ãã£ããªäœéšãžãšé²åããã«ã€ããŠãåŸæ¥ã®HTTPã¢ãã«ã®éçãæµ®ã圫ãã«ãªããŸããã
ãªã¢ã«ã¿ã€ã ã®æŽæ°æ
å ±ãååŸããããã«ãéçºè
ã¯åœåã以äžã®ãããªåé¿çã«é Œã£ãŠããŸããã
ã·ã§ãŒãããŒãªã³ã° (Short Polling): ãã©ãŠã¶ãæ°ç§ããã«HTTPãªã¯ãšã¹ããç¹°ãè¿ãéä¿¡ããæ°ããããŒã¿ãããããµãŒããŒã«åãåãããŸããããã¯å€§éã®ããããŒãªãŒããŒããããçã¿åºãããµãŒããŒãªãœãŒã¹ã浪費ããŸãã ãã³ã°ããŒãªã³ã° (Long Polling / Comet): ãã©ãŠã¶ããªã¯ãšã¹ããéä¿¡ãããµãŒããŒã¯æ°ããããŒã¿ãå©çšå¯èœã«ãªããŸã§æ¥ç¶ãä¿æããŸããããŒã¿ãéä¿¡ããããšæ¥ç¶ãéãããããã©ãŠã¶ã¯å³åº§ã«æ°ãããªã¯ãšã¹ããéããŸããããã¯ç®¡çãè€éã§ãæ¥ç¶ç¢ºç«æã®ãªãŒããŒããããäŸç¶ãšããŠçºçããŸãã **WebSocketïŒãŠã§ããœã±ããïŒ**ã¯ãåäžã®TCPæ¥ç¶äžã§æ°žç¶çãåæ¹åããã€å
šäºéïŒãã«ãã¥ãã¬ãã¯ã¹ïŒã®éä¿¡ãè¡ãããã®æšæºåããããããã³ã«ãå°å
¥ããããšã§ããããã®å¶éã解決ããŸããã
WebSocketãšã¯äœãïŒ WebSocketïŒRFC 6455ã§å®çŸ©ïŒã¯HTTPãšäžŠè¡ããŠåäœããŸããHTTPãã¯ã©ã€ã¢ã³ããããããªã¯ãšã¹ããéå§ã§ããªãã¹ããŒãã¬ã¹ãªãããã³ã«ã§ããã®ã«å¯ŸããWebSocketæ¥ç¶ã¯äžåºŠç¢ºç«ããããšç¡æéã«éãããŸãŸã«ãªããã¯ã©ã€ã¢ã³ããšãµãŒããŒã®äž¡æ¹ããã€ã§ãæå°éã®é
å»¶ã§ããŒã¿ãéä¿¡ãåãããšãã§ããŸãã
WebSocketã®æ ¹æ¬çãªã«ãŒã«ã¯ä»¥äžã®éãã§ãã
äžåºŠæ¥ç¶ã確ç«ããããšãã©ã¡ãã®åŽããã§ããæ°ããæ¥ç¶ãªã¯ãšã¹ããéå§ããããšãªãããã€ã§ãã¡ãã»ãŒãžãéä¿¡ã§ããŸãã
ã¹ããããã€ã¹ãããã»ãŠã©ãŒã¯ã¹ã«ãŒïŒæ¥ç¶ã®ã©ã€ããµã€ã¯ã« WebSocketæ¥ç¶ã¯ããã³ãã·ã§ã€ã¯ãããŒã¿è»¢éãåæãšãã3ã€ã®æç¢ºãªãã§ãŒãºãçµãŸãã
1. HTTPãã³ãã·ã§ã€ã¯ïŒãããã³ã«ã®ã¢ããã°ã¬ãŒãïŒ ãã¡ã€ã¢ãŠã©ãŒã«ãã«ãŒã¿ãŒã¯ãããŒã80ïŒHTTPïŒããã³443ïŒHTTPSïŒã®æšæºçãªãŠã§ããã©ãã£ãã¯ãèš±å¯ããããã«èšå®ãããŠãããããWebSocketã¯æšæºã®HTTP/1.1ãªã¯ãšã¹ããšããŠéå§ãããŸããããã¯ã¢ããã°ã¬ãŒããã³ãã·ã§ã€ã¯ãšåŒã°ããŸãã
ã¯ã©ã€ã¢ã³ãããã®ãªã¯ãšã¹ã ã¯ã©ã€ã¢ã³ãã¯ããããã³ã«ã®åãæ¿ããèŠæ±ããç¹å®ã®ããããŒãå«ãHTTP GETãªã¯ãšã¹ããéä¿¡ããŸãã
GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Sec-WebSocket-Version: 13 Origin: https://example.com Upgrade: websocket ãš Connection: Upgrade: ãããã³ã«ã®åãæ¿ããåžæããŠããããšããµãŒããŒã«äŒããŸãã Sec-WebSocket-Key: Base64ã§ãšã³ã³ãŒããããã©ã³ãã ãª16ãã€ãã®å€ããµãŒããŒããã³ãã·ã§ã€ã¯ãåä¿¡ããWebSocketãããã³ã«ãçè§£ããŠããããšã蚌æããããã«äœ¿çšãããŸãã Sec-WebSocket-Version: WebSocketãããã³ã«ã®ããŒãžã§ã³ãæå®ããŸãïŒéåžžã¯13ïŒã Origin: ãµãŒããŒãæ¥ç¶ãèš±å¯ãããã©ããã倿ããããã«äœ¿çšãããŸãïŒäžæ£ãªãµã€ãããã®ã¯ãã¹ãµã€ãæ¥ç¶ãé²ãã»ãã¥ãªãã£ãã§ãã¯ïŒã ãµãŒããŒããã®ã¬ã¹ãã³ã¹ ãµãŒããŒãWebSocketããµããŒãããŠããå Žåããªã¯ãšã¹ããæ€èšŒããHTTPã¹ããŒã¿ã¹ã³ãŒã 101 Switching ProtocolsïŒãããã³ã«åãæ¿ãïŒã§å¿çããŸãã
WebSocket
Webéçº
ãããã¯ãŒã¯
ãªã¢ã«ã¿ã€ã
ã»ãã¥ãªãã£