File size: 1,548 Bytes
b4b645c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import asyncio
import websockets
import json
import time

# データの共有辞書
shared_data = {
    "latest_sensor_data": None,
    "last_message_time": None
}

# クライアントからのデータを処理し、共有データを更新
async def handle_client(websocket, path):
    global shared_data
    while True:
        try:
            # クライアントからのメッセージを受信
            message = await websocket.recv()
            print(f"受信したメッセージ: {message}")

            # "ping"の場合、"pong"で応答
            if message == "ping":
                await websocket.send("pong")
                continue

            # JSON形式のセンサーデータを受信した場合
            sensor_data = json.loads(message)
            shared_data["latest_sensor_data"] = sensor_data
            shared_data["last_message_time"] = time.time()
            
            # 受信データをサーバー側に出力
            print(f"最新センサーデータ: {shared_data['latest_sensor_data']}")
        except websockets.ConnectionClosed:
            print("クライアントとの接続が切断されました")
            break

# WebSocketサーバーを起動
async def main():
    async with websockets.serve(handle_client, "localhost", 8765):
        print("WebSocketサーバーが起動しました。")
        await asyncio.Future()  # 無限に実行

# メイン関数の実行
if __name__ == "__main__":
    asyncio.run(main())