Commit 9b99af13 authored by ibuler's avatar ibuler
Browse files

perf: 重构通知的ws架构

parent 07898004
Showing with 62 additions and 1 deletion
+62 -1
from functools import wraps
from common.utils.connection import RedisPubSub
from django.utils.functional import LazyObject
class UserEventSubPub(LazyObject):
def _setup(self):
self._wrapped = lambda: RedisPubSub('notifications.SiteMessageCome')
class Event:
def __init__(self, user, tp, msg):
self.user = user
self.name = ''
self.type = tp
self.msg = msg
def on_user_event_ws_connect(func):
@wraps(func)
def wrapper(*args, **kwargs):
event = func(*args, **kwargs)
return event
return wrapper
user_event_chan = UserEventSubPub()
......@@ -4,13 +4,47 @@ import json
from channels.generic.websocket import JsonWebsocketConsumer
from common.utils import get_logger
from .models import SiteMessage
from .site_msg import SiteMessageUtil
from .signals_handler import new_site_msg_chan
logger = get_logger(__name__)
class UserEventWebsocket(JsonWebsocketConsumer):
disconnected = False
refresh_every_seconds = 10
def connect(self):
user = self.scope["user"]
if user.is_authenticated:
self.accept()
thread = threading.Thread(target=self.send_event)
thread.start()
else:
self.close()
def receive(self, text_data=None, bytes_data=None, **kwargs):
data = json.loads(text_data)
refresh_every_seconds = data.get('refresh_every_seconds')
try:
refresh_every_seconds = int(refresh_every_seconds)
except Exception as e:
logger.error(e)
return
if refresh_every_seconds > 0:
self.refresh_every_seconds = refresh_every_seconds
def send_event(self):
user_id = self.scope["user"].id
def disconnect(self, close_code):
self.disconnected = True
self.close()
class SiteMsgWebsocket(JsonWebsocketConsumer):
disconnected = False
refresh_every_seconds = 10
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment