ãããã¯ãŒã¯ããã°ã©ãã³ã°ãšãœã±ããå®è£ ã®åºç€ãæ¢æ±ããŸãããœã±ããã®çš®é¡ããããã³ã«ããããã¯ãŒã¯ã¢ããªã±ãŒã·ã§ã³æ§ç¯ã®ããã®å®è·µäŸãåŠã³ãŸãã
ãããã¯ãŒã¯ããã°ã©ãã³ã°ïŒãœã±ããå®è£ ã®åŸ¹åºè§£èª¬
仿¥ã®çžäºæ¥ç¶ãããäžçã«ãããŠããããã¯ãŒã¯ããã°ã©ãã³ã°ã¯ã忣ã·ã¹ãã ãã¯ã©ã€ã¢ã³ããµãŒããŒã¢ããªã±ãŒã·ã§ã³ãããã³ãããã¯ãŒã¯ãä»ããŠéä¿¡ããå¿ èŠã®ãããããããœãããŠã§ã¢ãæ§ç¯ããéçºè ã«ãšã£ãŠåºæ¬çãªã¹ãã«ã§ãããã®èšäºã§ã¯ããããã¯ãŒã¯ããã°ã©ãã³ã°ã®åºç€ã§ãããœã±ããå®è£ ã«ã€ããŠå æ¬çã«æ¢æ±ããŸããå ç¢ã§å¹ççãªãããã¯ãŒã¯ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããæ¹æ³ãçè§£ããããã«ãå¿ é ã®æŠå¿µããããã³ã«ãããã³å®è·µçãªäŸãåãäžããŸãã
ãœã±ãããšã¯äœãïŒ
æ¬è³ªçã«ããœã±ããã¯ãããã¯ãŒã¯éä¿¡ã®ãšã³ããã€ã³ãã§ããã¢ããªã±ãŒã·ã§ã³ãšãããã¯ãŒã¯ã®éã®åºå ¥ãå£ã®ãããªãã®ã ãšèããŠãã ãããããã«ãããããã°ã©ã ã¯ã€ã³ã¿ãŒããããããŒã«ã«ãããã¯ãŒã¯ãä»ããŠããŒã¿ãéåä¿¡ã§ããŸãããœã±ããã¯IPã¢ãã¬ã¹ãšããŒãçªå·ã«ãã£ãŠèå¥ãããŸããIPã¢ãã¬ã¹ã¯ãã¹ããã·ã³ãæå®ããããŒãçªå·ã¯ãã®ãã¹ãäžã®ç¹å®ã®ããã»ã¹ãŸãã¯ãµãŒãã¹ãæå®ããŸãã
äŸãïŒæçŽãéãããšãæ³åããŠã¿ãŠãã ãããIPã¢ãã¬ã¹ã¯åä¿¡è ã®äœæã®ãããªãã®ã§ãããŒãçªå·ã¯ãã®å»ºç©å ã®ã¢ããŒãã®éšå±çªå·ã®ãããªãã®ã§ããæçŽãæ£ããå®å ã«å±ãããã«ã¯ãäž¡æ¹ãå¿ èŠã§ãã
ãœã±ããã®çš®é¡ãçè§£ãã
ãœã±ããã«ã¯ããŸããŸãªçš®é¡ãããããããããç°ãªãã¿ã€ãã®ãããã¯ãŒã¯éä¿¡ã«é©ããŠããŸããäž»èŠãª2ã€ã®ãœã±ããã¿ã€ãã¯æ¬¡ã®ãšããã§ãïŒ
- ã¹ããªãŒã ãœã±ãã (TCP): ãããã¯ãä¿¡é Œæ§ã®é«ããã³ãã¯ã·ã§ã³æåã®ãã€ãã¹ããªãŒã ãµãŒãã¹ãæäŸããŸããTCPã¯ããŒã¿ãæ£ããé åºã§ããšã©ãŒãªãé ä¿¡ãããããšãä¿èšŒããŸãã倱ããããã±ããã®åéä¿¡ããåä¿¡è ãå§åããªãããã®ãããŒå¶åŸ¡ãåŠçããŸããäŸãšããŠã¯ããŠã§ããã©ãŠãžã³ã°(HTTP/HTTPS)ãé»åã¡ãŒã«(SMTP)ããã¡ã€ã«è»¢é(FTP)ãªã©ããããŸãã
- ããŒã¿ã°ã©ã ãœã±ãã (UDP): ãããã¯ãã³ãã¯ã·ã§ã³ã¬ã¹ã§ä¿¡é Œæ§ã®äœãããŒã¿ã°ã©ã ãµãŒãã¹ãæäŸããŸããUDPã¯ããŒã¿ãé ä¿¡ãããããšãä¿èšŒãããé ä¿¡ã®é åºãä¿èšŒããŸãããããããTCPãããé«éã§å¹ççã§ãããããä¿¡é Œæ§ãããé床ãéèŠãªã¢ããªã±ãŒã·ã§ã³ã«é©ããŠããŸããäŸãšããŠã¯ããããªã¹ããªãŒãã³ã°ããªã³ã©ã€ã³ã²ãŒã ãDNSã«ãã¯ã¢ãããªã©ããããŸãã
TCPãšUDPã®è©³çŽ°ãªæ¯èŒ
TCPãšUDPã®ã©ã¡ããéžæãããã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®èŠä»¶ã«ãã£ãŠç°ãªããŸãã以äžã¯ãäž»ãªéãããŸãšãã衚ã§ãïŒ
| æ©èœ | TCP | UDP |
|---|---|---|
| ã³ãã¯ã·ã§ã³æå | ã¯ã | ããã |
| ä¿¡é Œæ§ | é ä¿¡ä¿èšŒãé åºä¿èšŒ | ä¿¡é Œæ§ãªããé ä¿¡ãé åºã®ä¿èšŒãªã |
| ãªãŒããŒããã | é«ãïŒæ¥ç¶ç¢ºç«ããšã©ãŒãã§ãã¯ïŒ | äœã |
| é床 | é ã | éã |
| 䜿çšäŸ | ãŠã§ããã©ãŠãžã³ã°ãé»åã¡ãŒã«ããã¡ã€ã«è»¢é | ãããªã¹ããªãŒãã³ã°ããªã³ã©ã€ã³ã²ãŒã ãDNSã«ãã¯ã¢ãã |
ãœã±ããããã°ã©ãã³ã°ã®ããã»ã¹
ãœã±ãããäœæããŠäœ¿çšããããã»ã¹ã¯ãéåžžã以äžã®ã¹ããããå«ã¿ãŸãïŒ- ãœã±ããã®äœæ: ã¢ãã¬ã¹ãã¡ããªïŒäŸïŒIPv4ãŸãã¯IPv6ïŒãšãœã±ããã¿ã€ãïŒäŸïŒTCPãŸãã¯UDPïŒãæå®ããŠããœã±ãããªããžã§ã¯ããäœæããŸãã
- ãã€ã³ã: IPã¢ãã¬ã¹ãšããŒãçªå·ããœã±ããã«å²ãåœãŠãŸããããã«ããããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«ã©ã®ãããã¯ãŒã¯ã€ã³ã¿ãŒãã§ãŒã¹ãšããŒãã§ãªãã¹ã³ããããäŒããŸãã
- ãªãã¹ã³ (TCPãµãŒããŒ): TCPãµãŒããŒã®å Žåãçä¿¡æ¥ç¶ããªãã¹ã³ããŸããããã«ããããœã±ããã¯ããã·ãã¢ãŒãã«ãªããã¯ã©ã€ã¢ã³ããæ¥ç¶ããã®ãåŸ ã¡ãŸãã
- æ¥ç¶ (TCPã¯ã©ã€ã¢ã³ã): TCPã¯ã©ã€ã¢ã³ãã®å ŽåããµãŒããŒã®IPã¢ãã¬ã¹ãšããŒãçªå·ã«æ¥ç¶ã確ç«ããŸãã
- ã¢ã¯ã»ãã (TCPãµãŒããŒ): ã¯ã©ã€ã¢ã³ããæ¥ç¶ãããšããµãŒããŒã¯ãã®æ¥ç¶ãåãå ¥ãããã®ã¯ã©ã€ã¢ã³ããšã®éä¿¡å°çšã®æ°ãããœã±ãããäœæããŸãã
- ããŒã¿ã®éåä¿¡: ãœã±ããã䜿çšããŠããŒã¿ãéåä¿¡ããŸãã
- ãœã±ããã®ã¯ããŒãº: ãªãœãŒã¹ãè§£æŸããæ¥ç¶ãçµäºããããã«ãœã±ãããéããŸãã
ãœã±ããå®è£ ã®äŸ (Python)
TCPãšUDPã®äž¡æ¹ã«ã€ããŠãç°¡åãªPythonã®äŸã§ãœã±ããå®è£ ã説æããŸãããã
TCPãµãŒããŒã®äŸ
import socket
HOST = '127.0.0.1' # Standard loopback interface address (localhost)
PORT = 65432 # Port to listen on (non-privileged ports are > 1023)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
print(f"Connected by {addr}")
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
説æ:
socket.socket(socket.AF_INET, socket.SOCK_STREAM)ã¯IPv4ã䜿çšããŠTCPãœã±ãããäœæããŸããs.bind((HOST, PORT))ã¯ãœã±ãããæå®ãããIPã¢ãã¬ã¹ãšããŒãã«ãã€ã³ãããŸããs.listen()ã¯ãœã±ããããªãã¹ã³ã¢ãŒãã«ããã¯ã©ã€ã¢ã³ãã®æ¥ç¶ãåŸ ã¡ãŸããconn, addr = s.accept()ã¯ã¯ã©ã€ã¢ã³ãã®æ¥ç¶ãåãå ¥ããæ°ãããœã±ãããªããžã§ã¯ãïŒconnïŒãšã¯ã©ã€ã¢ã³ãã®ã¢ãã¬ã¹ãè¿ããŸããwhileã«ãŒãã¯ã¯ã©ã€ã¢ã³ãããããŒã¿ãåä¿¡ãããããéãè¿ããŸãïŒãšã³ãŒãµãŒããŒïŒã
TCPã¯ã©ã€ã¢ã³ãã®äŸ
import socket
HOST = '127.0.0.1' # The server's hostname or IP address
PORT = 65432 # The port used by the server
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(b'Hello, world')
data = s.recv(1024)
print(f"Received {data!r}")
説æ:
socket.socket(socket.AF_INET, socket.SOCK_STREAM)ã¯IPv4ã䜿çšããŠTCPãœã±ãããäœæããŸããs.connect((HOST, PORT))ã¯æå®ãããIPã¢ãã¬ã¹ãšããŒãã§ãµãŒããŒã«æ¥ç¶ããŸããs.sendall(b'Hello, world')ã¯ãµãŒããŒã«ãHello, worldããšããã¡ãã»ãŒãžãéä¿¡ããŸããbãã¬ãã£ãã¯ã¹ã¯ãã€ãæååã瀺ããŸããdata = s.recv(1024)ã¯ãµãŒããŒããæå€§1024ãã€ãã®ããŒã¿ãåä¿¡ããŸãã
UDPãµãŒããŒã®äŸ
import socket
HOST = '127.0.0.1'
PORT = 65432
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
s.bind((HOST, PORT))
while True:
data, addr = s.recvfrom(1024)
print(f"Received from {addr}: {data.decode()}")
s.sendto(data, addr)
説æ:
socket.socket(socket.AF_INET, socket.SOCK_DGRAM)ã¯IPv4ã䜿çšããŠUDPãœã±ãããäœæããŸããs.bind((HOST, PORT))ã¯ãœã±ãããæå®ãããIPã¢ãã¬ã¹ãšããŒãã«ãã€ã³ãããŸããdata, addr = s.recvfrom(1024)ã¯ã¯ã©ã€ã¢ã³ãããããŒã¿ãåä¿¡ããã¯ã©ã€ã¢ã³ãã®ã¢ãã¬ã¹ããã£ããã£ããŸããs.sendto(data, addr)ã¯ããŒã¿ãã¯ã©ã€ã¢ã³ãã«éãè¿ããŸãã
UDPã¯ã©ã€ã¢ã³ãã®äŸ
import socket
HOST = '127.0.0.1'
PORT = 65432
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
message = "Hello, UDP Server"
s.sendto(message.encode(), (HOST, PORT))
data, addr = s.recvfrom(1024)
print(f"Received {data.decode()}")
説æ:
socket.socket(socket.AF_INET, socket.SOCK_DGRAM)ã¯IPv4ã䜿çšããŠUDPãœã±ãããäœæããŸããs.sendto(message.encode(), (HOST, PORT))ã¯ãµãŒããŒã«ã¡ãã»ãŒãžãéä¿¡ããŸããdata, addr = s.recvfrom(1024)ã¯ãµãŒããŒããã®å¿çãåä¿¡ããŸãã
ãœã±ããããã°ã©ãã³ã°ã®å®çšçãªå¿çš
ãœã±ããããã°ã©ãã³ã°ã¯ã以äžãå«ãå¹ åºãã¢ããªã±ãŒã·ã§ã³ã®åºç€ã§ãïŒ
- WebãµãŒããŒ: HTTPãªã¯ãšã¹ããåŠçãããŠã§ãããŒãžãæäŸããŸããäŸïŒApache, NginxïŒäŸãã°ãæ¥æ¬ã®Eã³ããŒã¹ãµã€ãããšãŒãããã®éè¡ã¢ããªã±ãŒã·ã§ã³ãç±³åœã®ãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ãªã©ãäžçäžã§å©çšãããŠããŸãïŒã
- ãã£ããã¢ããªã±ãŒã·ã§ã³: ãŠãŒã¶ãŒéã®ãªã¢ã«ã¿ã€ã éä¿¡ãå¯èœã«ããŸããäŸïŒWhatsApp, SlackïŒå人çããã³å°éçãªã³ãã¥ãã±ãŒã·ã§ã³ã®ããã«äžçäžã§äœ¿çšãããŠããŸãïŒã
- ãªã³ã©ã€ã³ã²ãŒã : ãã«ããã¬ã€ã€ãŒã®ã€ã³ã¿ã©ã¯ã·ã§ã³ãä¿é²ããŸããäŸïŒFortnite, League of LegendsïŒã°ããŒãã«ãªã²ãŒã ã³ãã¥ããã£ã¯å¹ççãªãããã¯ãŒã¯éä¿¡ã«äŸåããŠããŸãïŒã
- ãã¡ã€ã«è»¢éããã°ã©ã : ã³ã³ãã¥ãŒã¿éã§ãã¡ã€ã«ã転éããŸããäŸïŒFTPã¯ã©ã€ã¢ã³ãããã¢ããŒãã¢ãã¡ã€ã«å ±æïŒå€§èŠæš¡ãªããŒã¿ã»ãããå ±æããããã«äžçäžã®ç ç©¶æ©é¢ã§å©çšãããŠããŸãïŒã
- ããŒã¿ããŒã¹ã¯ã©ã€ã¢ã³ã: ããŒã¿ããŒã¹ãµãŒããŒã«æ¥ç¶ãã察話ããŸããäŸïŒMySQL, PostgreSQLãžã®æ¥ç¶ïŒäžçäžã®å€æ§ãªæ¥çã®äºæ¥éå¶ã«äžå¯æ¬ ã§ãïŒã
- IoTããã€ã¹: ã¹ããŒãããã€ã¹ãšãµãŒããŒéã®éä¿¡ãå¯èœã«ããŸããäŸïŒã¹ããŒãããŒã ããã€ã¹ãç£æ¥çšã»ã³ãµãŒïŒããŸããŸãªåœãæ¥çã§æ¥éã«æ¡çšãæ¡å€§ããŠããŸãïŒã
é«åºŠãªãœã±ããããã°ã©ãã³ã°ã®æŠå¿µ
åºæ¬ãè¶ ããŠããããã¯ãŒã¯ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãšä¿¡é Œæ§ãåäžãããããšãã§ããããã€ãã®é«åºŠãªæŠå¿µããããŸãïŒ
- ãã³ããããã³ã°ãœã±ãã: ããŒã¿ã®éåä¿¡ãåŸ ã£ãŠããéã«ãã¢ããªã±ãŒã·ã§ã³ãä»ã®ã¿ã¹ã¯ãå®è¡ã§ããããã«ããŸãã
- å€éå (select, poll, epoll): åäžã®ã¹ã¬ããã§è€æ°ã®ãœã±ããæ¥ç¶ãåæã«åŠçã§ããããã«ããŸããããã«ãããå€ãã®ã¯ã©ã€ã¢ã³ããåŠçãããµãŒããŒã®å¹çãåäžããŸãã
- ã¹ã¬ãããšéåæããã°ã©ãã³ã°: è€æ°ã®ã¹ã¬ãããéåæããã°ã©ãã³ã°æè¡ã䜿çšããŠãåææäœãåŠçããå¿çæ§ãåäžãããŸãã
- ãœã±ãããªãã·ã§ã³: ã¿ã€ã ã¢ãŠãã®èšå®ããããã¡ãªã³ã°ãªãã·ã§ã³ãã»ãã¥ãªãã£èšå®ãªã©ããœã±ããã®åäœãæ§æããŸãã
- IPv6: ãã倧ããªã¢ãã¬ã¹ç©ºéãšæ¹åãããã»ãã¥ãªãã£æ©èœããµããŒãããããã«ã次äžä»£ã®ã€ã³ã¿ãŒããããããã³ã«ã§ããIPv6ã䜿çšããŸãã
- ã»ãã¥ãªã㣠(SSL/TLS): ãããã¯ãŒã¯ãä»ããŠéä¿¡ãããããŒã¿ãä¿è·ããããã«ãæå·åãšèªèšŒãå®è£ ããŸãã
ã»ãã¥ãªãã£ã«é¢ããèæ ®äºé
ãããã¯ãŒã¯ã»ãã¥ãªãã£ã¯æãéèŠã§ãããœã±ããããã°ã©ãã³ã°ãå®è£ ããéã«ã¯ã以äžãèæ ®ããŠãã ããïŒ
- ããŒã¿æå·å: SSL/TLSã䜿çšããŠãããã¯ãŒã¯çµç±ã§éä¿¡ãããããŒã¿ãæå·åããçèŽããä¿è·ããŸãã
- èªèšŒ: äžæ£ã¢ã¯ã»ã¹ãé²ãããã«ãã¯ã©ã€ã¢ã³ããšãµãŒããŒã®èº«å ã確èªããŸãã
- å ¥åæ€èšŒ: ãããã¡ãªãŒããŒãããŒããã®ä»ã®ã»ãã¥ãªãã£è匱æ§ãé²ãããã«ããããã¯ãŒã¯ããåä¿¡ãããã¹ãŠã®ããŒã¿ãæ éã«æ€èšŒããŸãã
- ãã¡ã€ã¢ãŠã©ãŒã«èšå®: ãã¡ã€ã¢ãŠã©ãŒã«ãæ§æããŠãã¢ããªã±ãŒã·ã§ã³ãžã®ã¢ã¯ã»ã¹ãå¶éããæªæã®ãããã©ãã£ãã¯ããä¿è·ããŸãã
- 宿çãªã»ãã¥ãªãã£ç£æ»: 宿çãªã»ãã¥ãªãã£ç£æ»ã宿œããŠãæœåšçãªè匱æ§ãç¹å®ãã察åŠããŸãã
äžè¬çãªãœã±ãããšã©ãŒã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°
ãœã±ãããæ±ãéãããŸããŸãªãšã©ãŒã«ééããããšããããŸãã以äžã¯äžè¬çãªãšã©ãŒãšãã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°æ¹æ³ã§ãïŒ
- Connection Refused (æ¥ç¶æåŠ): ãµãŒããŒãå®è¡ãããŠããªãããæå®ãããããŒãã§ãªãã¹ã³ããŠããŸããããµãŒããŒãå®è¡äžã§ãIPã¢ãã¬ã¹ãšããŒããæ£ããããšã確èªããŠãã ããããã¡ã€ã¢ãŠã©ãŒã«ã®èšå®ã確èªããŠãã ããã
- Address Already in Use (ã¢ãã¬ã¹ã¯æ¢ã«äœ¿çšäž): ä»ã®ã¢ããªã±ãŒã·ã§ã³ããã§ã«æå®ãããããŒãã䜿çšããŠããŸããå¥ã®ããŒããéžæããããä»ã®ã¢ããªã±ãŒã·ã§ã³ã忢ããŠãã ããã
- Connection Timed Out (æ¥ç¶ã¿ã€ã ã¢ãŠã): æå®ãããã¿ã€ã ã¢ãŠãæéå ã«æ¥ç¶ã確ç«ã§ããŸããã§ããããããã¯ãŒã¯æ¥ç¶ãšãã¡ã€ã¢ãŠã©ãŒã«ã®èšå®ã確èªããŠãã ãããå¿ èŠã«å¿ããŠã¿ã€ã ã¢ãŠãå€ãå¢ãããŠãã ããã
- Socket Error (ãœã±ãããšã©ãŒ): ãœã±ããã«åé¡ãããããšã瀺ãäžè¬çãªãšã©ãŒã§ãã詳现ã«ã€ããŠã¯ãšã©ãŒã¡ãã»ãŒãžã確èªããŠãã ããã
- Broken Pipe (ãã€ãã®ç Žæ): æ¥ç¶ãçžæåŽã«ãã£ãŠéããããŸããããœã±ãããéããããšã§ããã®ãšã©ãŒãé©åã«åŠçããŠãã ããã
ãœã±ããããã°ã©ãã³ã°ã®ãã¹ããã©ã¯ãã£ã¹
ãœã±ããã¢ããªã±ãŒã·ã§ã³ãå ç¢ã§ãå¹ççã§ãå®å šã§ããããšãä¿èšŒããããã«ã以äžã®ãã¹ããã©ã¯ãã£ã¹ã«åŸã£ãŠãã ããïŒ
- å¿ èŠãªå Žåã¯ä¿¡é Œæ§ã®é«ããã©ã³ã¹ããŒããããã³ã«ïŒTCPïŒã䜿çšãã: ä¿¡é Œæ§ãéèŠãªå Žåã¯TCPãéžæããŠãã ããã
- ãšã©ãŒãé©åã«åŠçãã: ã¯ã©ãã·ã¥ãé²ããã¢ããªã±ãŒã·ã§ã³ã®å®å®æ§ã確ä¿ããããã«ãé©åãªãšã©ãŒãã³ããªã³ã°ãå®è£ ããŠãã ããã
- ããã©ãŒãã³ã¹ãæé©åãã: ãã³ããããã³ã°ãœã±ãããå€éåãªã©ã®æè¡ã䜿çšããŠããã©ãŒãã³ã¹ãåäžãããŠãã ããã
- ã¢ããªã±ãŒã·ã§ã³ãä¿è·ãã: ããŒã¿ãä¿è·ããäžæ£ã¢ã¯ã»ã¹ãé²ãããã«ãæå·åãèªèšŒãªã©ã®ã»ãã¥ãªãã£å¯Ÿçãå®è£ ããŠãã ããã
- é©åãªãããã¡ãµã€ãºã䜿çšãã: äºæ³ãããããŒã¿éãåŠçã§ããååãªå€§ããã§ãããªãããã¡ã¢ãªã浪費ããªããããã¡ãµã€ãºãéžæããŠãã ããã
- ãœã±ãããé©åã«éãã: 䜿çšãçµãã£ããããªãœãŒã¹ãè§£æŸããããã«åžžã«ãœã±ãããéããŠãã ããã
- ã³ãŒããææžåãã: çè§£ãããããç¶æããããããããã«ãã³ãŒããæç¢ºã«ææžåããŠãã ããã
- ã¯ãã¹ãã©ãããã©ãŒã ã®äºææ§ãèæ ®ãã: è€æ°ã®ãã©ãããã©ãŒã ããµããŒãããå¿ èŠãããå Žåã¯ãããŒã¿ãã«ãªãœã±ããããã°ã©ãã³ã°æè¡ã䜿çšããŠãã ããã
ãœã±ããããã°ã©ãã³ã°ã®æªæ¥
WebSocketsãgRPCã®ãããªæ°ããæè¡ã人æ°ãéããŠããŸããããœã±ããããã°ã©ãã³ã°ã¯äŸç¶ãšããŠåºæ¬çãªã¹ãã«ã§ããããã¯ãããã¯ãŒã¯éä¿¡ãçè§£ããã«ã¹ã¿ã ãããã¯ãŒã¯ãããã³ã«ãæ§ç¯ããããã®åºç€ãæäŸããŸããã¢ãã®ã€ã³ã¿ãŒãããïŒIoTïŒã忣ã·ã¹ãã ãé²åãç¶ããã«ã€ããŠããœã±ããããã°ã©ãã³ã°ã¯åŒãç¶ãéèŠãªåœ¹å²ãæããç¶ããã§ãããã
çµè«
ãœã±ããå®è£ ã¯ãããã¯ãŒã¯ããã°ã©ãã³ã°ã®éèŠãªåŽé¢ã§ããããããã¯ãŒã¯ãä»ããã¢ããªã±ãŒã·ã§ã³éã®éä¿¡ãå¯èœã«ããŸãããœã±ããã®çš®é¡ããœã±ããããã°ã©ãã³ã°ã®ããã»ã¹ãããã³é«åºŠãªæŠå¿µãçè§£ããããšã§ãå ç¢ã§å¹ççãªãããã¯ãŒã¯ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸããã¢ããªã±ãŒã·ã§ã³ã®ä¿¡é Œæ§ãšå®å šæ§ã確ä¿ããããã«ãã»ãã¥ãªãã£ãåªå ãããã¹ããã©ã¯ãã£ã¹ã«åŸãããšãå¿ããªãã§ãã ããããã®ã¬ã€ãã§åŸãç¥èã«ããã仿¥ã®çžäºæ¥ç¶ãããäžçã«ããããããã¯ãŒã¯ããã°ã©ãã³ã°ã®èª²é¡ãšæ©äŒã«åãçµãæºåãæŽããŸããã