50 lines
1.7 KiB
Python
50 lines
1.7 KiB
Python
'''
|
|
服务端定时向客户端发送消息
|
|
'''
|
|
|
|
import asyncio
|
|
import websockets
|
|
from datetime import datetime
|
|
|
|
# 存储所有连接的客户端
|
|
connected_clients = set()
|
|
|
|
async def send_periodic_messages(interval=5):
|
|
"""定期向所有客户端发送消息"""
|
|
while True:
|
|
await asyncio.sleep(interval)
|
|
if connected_clients:
|
|
# message = "{'socketType':'7','number':'ROB23100098','groupingId':'0dc1ad7fdb394246981b8576465240ce','onlineStatus':'1','robotId':'6865c4ce61ee45a69e79f62eee55b83c'}"
|
|
message = "{\"socketType\":\"7\",\"number\":\"ROB23100098\",\"groupingId\":\"0dc1ad7fdb394246981b8576465240ce\",\"onlineStatus\":\"1\",\"robotId\":\"6865c4ce61ee45a69e79f62eee55b83c\"}"
|
|
# 6865c4ce61ee45a69e79f62eee55b83c
|
|
# 向所有客户端广播消息
|
|
await asyncio.wait([client.send(message) for client in connected_clients])
|
|
|
|
async def handle_client(websocket, path):
|
|
"""处理客户端连接"""
|
|
# 添加新客户端
|
|
connected_clients.add(websocket)
|
|
try:
|
|
# 保持连接开放
|
|
async for message in websocket:
|
|
# 可选的:处理客户端发来的消息
|
|
print(f"Received: {message}")
|
|
finally:
|
|
# 客户端断开时移除
|
|
connected_clients.remove(websocket)
|
|
|
|
async def main():
|
|
# 启动定时任务
|
|
asyncio.create_task(send_periodic_messages(interval=10))
|
|
|
|
# 启动WebSocket服务器
|
|
server = await websockets.serve(
|
|
handle_client,
|
|
"10.0.0.202",
|
|
8788
|
|
)
|
|
print("WebSocket server started on ws://10.0.0.202:8788")
|
|
await server.wait_closed()
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main()) |