🦷

Websocket を受信し続けるプログラムを書いていた

2022/12/29に公開

リアルタイムなメッセージングをブラウザー上で実現する Websocket を継続的に受信し続ける Python プログラムを書いてました。
メッセージには Update(更新)イベント と Delete(削除)イベント の2種類があるのでそれぞれ場合分けしています。

受信した内容は Amazon SQS にキューイングすることで、一度に許容量を超える大量にメッセージが配信されてきたときにも貯め込んでおいて後からゆっくり処理することが出来ます。

tootprobe.js
import os, json, datetime
import asyncio
import boto3
import websockets

# 受信する URL
StreamingURL = os.environ['STREAMING_URL']

# Amazon SQS のキュー URL
SQSClient = boto3.client('sqs')
QueueUrl = os.environ['QUEUE_URL']

async def get_toot():
  async with websockets.connect(StreamingURL) as websocket:
    count = 0
    while True:
      data = json.loads(await websocket.recv())

      if data["event"] == "update":
        body = json.dumps({"Type": "update", "StreamingURL": StreamingURL, "Payload": data["payload"]}, ensure_ascii=False)
        res = SQSClient.send_message(QueueUrl=QueueUrl, MessageBody=body)
      elif data["event"] == "delete":
        body = json.dumps({"Type": "delete", "StreamingURL": StreamingURL, "Payload": data["payload"]}, ensure_ascii=False)
        res = SQSClient.send_message(QueueUrl=QueueUrl, MessageBody=body)

if __name__ == "__main__":
  asyncio.run(get_toot())

Discussion