RODY/app/utils/websocket_tool.py
2022-11-24 11:15:07 +08:00

73 lines
2.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
@Time 2022/10/12 17:55
@Auth
@File websocket_tool.py
@IDE PyCharm
@MottoABC(Always Be Coding)
@Desc
"""
import json
from typing import Union, List, Dict
from app.core.common_utils import logger
from app.utils.JSONEncodeTools import MyEncoder
from configs.global_var import *
# global active_connections
# active_connections = multiprocessing.Manager().list()
# global active_connections_dist
# active_connections_dist = multiprocessing.Manager().dict()
class WebsocketUtil:
def __init__(self):
self.active_connections = multiprocessing.Manager().list()
self.active_connections_dist = multiprocessing.Manager().dict()
def connect(self, ws, id: str):
# 等待连接
msg = ws.receive()
# 存储ws连接对象
# global active_connections
self.active_connections.append(ws)
# global active_connections_dist
if id in self.active_connections_dist:
self.active_connections_dist[id].append(ws)
else:
ws_list = [ws, ]
self.active_connections_dist[id] = ws_list
def disconnect(self, ws, id):
# ws关闭时 移除ws对象
if ws.closed:
if ws in self.active_connections_dist.values():
# global active_connections
self.active_connections.remove(ws)
# global active_connections_dist
self.active_connections_dist[id].pop(ws)
@staticmethod
async def send_personal_message(message: str, ws):
# 发送个人消息
await ws.send(message)
def broadcast(self, message: str):
# 广播消息
# global active_connections
for connection in self.active_connections:
connection.send(message)
def send_message_proj_json(self, message: Union[str, int, List, Dict], id: str):
# 广播该项目的消息
# global active_connections_dist
for connection in self.active_connections_dist[id]:
try:
connection.send(json.dumps(message, cls=MyEncoder, indent=4), )
except Exception as e:
logger.error("websocket异常断开{}", e)
self.disconnect(ws=connection, id=id)
manager = WebsocketUtil()