- WebSocketã¨ã¯
- ãµã³ãã«ãã£ããã¢ããªã±ã¼ã·ã§ã³ãæ§ç¯
- websocket-clientã使ã£ã¦ã¿ã
- æå¾ã«
ã¢ããªã±ã¼ã·ã§ã³ãµã¼ãã¹é¨ã®éç°(義)ã§ãã
Pythonã®WebSocketã¯ã©ã¤ã¢ã³ãç¨ã©ã¤ãã©ãªã§ããã
websocket-client ã使ã£ã¦ã¿ãã®ã§ãåºæ¬çãªä½¿ç¨æ¹æ³ããç´¹ä»ãã¾ãã
WebSocketã¨ã¯
Webãµã¼ãã¨Webã¯ã©ã¤ã¢ã³ãéã§åæ¹åã«éä¿¡ã§ããããã«ããæè¡ã§ãã
ã³ãã¯ã·ã§ã³ãç¶æãããµã¼ãå´ãããã¯ã©ã¤ã¢ã³ãã¸ãã¼ã¿ãéä¿¡ãããã¨ãã§ãã¾ãã
ãã£ããã¢ããªã±ã¼ã·ã§ã³ãªã©ã®ãªã¢ã«ã¿ã¤ã ã§ç¶ç¶çã«ãã¼ã¿äº¤æãå¿
è¦ãªãµã¼ãã¹ã§ããå©ç¨ããã¦ãã¾ãã
ãµã³ãã«ãã£ããã¢ããªã±ã¼ã·ã§ã³ãæ§ç¯
ä»åã¯ãwebsocket-clientã使ããã¨ãç®çãªã®ã§ã
ãµã¼ãå´ã¯ä»¥ä¸ã®ãã¥ã¼ããªã¢ã«éãã«ããã£ã¨æ§ç¯ãã¾ãã
CloudFormationãã³ãã¬ã¼ããç¨æããã¦ããã®ã§ã
ãã³ãã¬ã¼ãããã¦ã³ãã¼ããã
CloudFormationã³ã³ã½ã¼ã«ãããã³ãã¬ã¼ãã使ç¨ãã¦ã¹ã¿ãã¯ã®ä½æãè¡ãã¾ãã
API Gateway (WebSocket API)ã¯ãæåã§ã®ä½æã¨ãªã£ã¦ãã¾ããæé éãã«è¡ãã°5åã»ã©ã§ä½æã§ãããã¨æãã¾ãã
websocket-clientã使ã£ã¦ã¿ã
ã¯ã©ã¤ã¢ã³ãå´ã¯ãwebsocket-client ã使ç¨ãã¾ãã
åä½æ¤è¨¼ã«ã¯ã以ä¸ãã¼ã¸ã§ã³ã使ç¨ãã¾ããã
- Pythonãã¼ã¸ã§ã³: 3.11.4
- websocket-clientãã¼ã¸ã§ã³: 1.8.0
å
ã»ã©æ§ç¯ãããã£ããã¢ããªã±ã¼ã·ã§ã³ã«ã¡ãã»ã¼ã¸ãéä¿¡ããã¯ã©ã¤ã¢ã³ãå´ã®ã³ã¼ããæºåãã¾ãã
åºæ¬çã«ã¯ãã©ã¤ãã©ãªã®READMEè¨è¼ã®ã³ã¼ãããã®ã¾ã¾ä½¿ç¨ãã¦ãã¾ãã以ä¸2ç¹å¤æ´ãå ãã¾ããã
on_open
ã§ãæ¥ç¶éå§æã«Hello, World
ããµã¼ãã«éä¿¡ãã¾ãã
on_message
ã§ããµã¼ãããåä¿¡ããã¡ãã»ã¼ã¸ãããã³ããã«åºåãã¤ã¤ãåä¿¡ã¡ãã»ã¼ã¸ããã®ã¾ã¾ãªã¦ã è¿ãã§ãµã¼ãã«éä¿¡ãã¦ãã¾ãã
websocket_client_test.py
import json import websocket url = "wss://<API_ID>.execute-api.ap-northeast-1.amazonaws.com/production" def on_message(ws, message): print("received: ", message) r = {"action": "sendmessage", "message": f"bot> {message}"} ws.send(json.dumps(r)) def on_error(ws, error): print(error) def on_close(ws, close_status_code, close_msg): print("### closed ###") def on_open(ws): print("Opened connection") r = {"action": "sendmessage", "message": "bot> Hello, World"} ws.send(json.dumps(r)) if __name__ == "__main__": ws = websocket.WebSocketApp( url, on_open=on_open, on_message=on_message, on_error=on_error, on_close=on_close, ) ws.run_forever()
次ã«ã¤ã³ã¿ããªã¿ãèµ·åãã以ä¸ã®ããã«å
¥åãã¦ããã¾ãã
ã¤ã³ã¿ããªã¿ã§èµ·åãã¦ããç»é¢ãã¯ã©ã¤ã¢ã³ãâ ã¨ãã¾ãã
ws.recv()
ã§ãµã¼ããããã¼ã¿ãåä¿¡ããã®ãå¾
ã¤ç¶æ
ã«ãªãã¾ãã
ã¯ã©ã¤ã¢ã³ãâ
>>> import json >>> import websocket >>> url = "wss://<API_ID>.execute-api.ap-northeast-1.amazonaws.com/production" >>> ws = websocket.create_connection(url) >>> ws.recv()
ããä¸ã¤ã¿ã¼ããã«ãéãå
ã»ã©ä½æããPythonãã¡ã¤ã«ãå®è¡ãã¾ãã
ãã¡ãã®ç»é¢ãã¯ã©ã¤ã¢ã³ãâ¡ã¨ãã¾ãã
ã¯ã©ã¤ã¢ã³ãâ¡
$ python websocket_client_test.py Opened connection
ã¯ã©ã¤ã¢ã³ãâ ã®ç»é¢ã§ãHello, World
ããµã¼ãããåä¿¡ã§ãã¾ããã
å¼ãç¶ãã¯ã©ã¤ã¢ã³ãâ ã®ç»é¢ã§ã¡ãã»ã¼ã¸éä¿¡ã¨å信確èªããã¦ã¿ã¾ãã
ã¯ã©ã¤ã¢ã³ãâ
>>> import json >>> import websocket >>> url = "wss://<API_ID>.execute-api.ap-northeast-1.amazonaws.com/production" >>> ws = websocket.create_connection(url) >>> ws.recv() 'bot> Hello, World' >>> ws.send(json.dumps({"action": "sendmessage", "message": "ããã«ã¡ã¯"})) 76 >>> ws.recv() 'bot> ããã«ã¡ã¯' >>> ws.send(json.dumps({"action": "sendmessage", "message": "å æ°ã§ããï¼"})) 82 >>> ws.recv() 'bot> å æ°ã§ããï¼' >>> ws.send(json.dumps({"action": "sendmessage", "message": "ããããªã"})) 76 >>> ws.recv() 'bot> ããããªã' >>> ws.close()
ã¯ã©ã¤ã¢ã³ãâ¡ã®ç»é¢ã§ã¯ã以ä¸ã®ããã«åºåããã¦ãã¾ãã
çµäºããå ´åã¯ãCtrl + C
ã§çµäºãã¾ãã
ã¯ã©ã¤ã¢ã³ãâ¡
$ python websocket_test.py Opened connection received: ããã«ã¡ã¯ received: å æ°ã§ããï¼ received: ããããªã
æå¾ã«
ä»åã¯åºæ¬çãªæ©è½ã®ã¿ã使ç¨ãã¾ããã
proxyã®ä½¿ç¨ããåææã®åæ¥ç¶ãªã©å®éç¨ã®ä¸ã§å¿
è¦ã«ãªã£ã¦ããããªæ©è½ãããçºã
å¼ãç¶ãåãã£ããã¨ãããã°ãç´¹ä»ãã¦ããããã¨æãã¾ãã
æå¾ã¾ã§ã覧ããã ããããã¨ããããã¾ããã
éç° ç¾©ç« (å·çè¨äºä¸è¦§)
2023å¹´4æå ¥ç¤¾ ASé¨DS3課