관리자가 모든 사용자에게 공지를 보내거나 특정 사용자에게 알림을 보내는 등 내 플라스크 애플리케이션에 간단한 메시지 알림 기능을 구현하고 싶습니다.
그런데 구현 과정에서 문제가 발생했습니다. 그 상황을 자세히 설명하면 다음과 같습니다.
서버가 클라이언트에 메시지를 보내도록 하기 위해 sse 메커니즘을 사용하는데 여기에 문제가 있습니다. 즉, 메시지를 보내는 모듈이 언제 메시지를 보낼지 모른다는 것입니다. 예를 들어 사용자 A가 댓글을 달 때입니다. 사용자 B의 블로그에서 사용자 B에게 알려야 합니다. 이때 송신 모듈에 "B에게 메시지를 보낼 시간입니다."라고 알려야 합니다. 송신 모듈에 알리는 방법은 무엇입니까?
제가 생각한 것은 데이터베이스를 폴링하는 것이었지만 서버의 스트레스 저항력을 너무 많이 테스트하는 것이라고 느꼈습니다. Baidu는 다음과 같이 말했습니다. 해당 데이터 테이블이 업데이트될 때마다 Redis에 메시지가 생성되고 Redis가 폴링됩니다.
좋은 것 같지만 구현 시 많은 문제가 발생합니다.
예: (1) redis는 키-값 저장소입니다. 관리자가 A뿐만 아니라 B, C 등에 메시지를 보내려는 경우 키를 어떻게 구별해야 합니까?
으아악이삼일 고민했는데 선배님들의 조언 부탁드립니다
redis pub/sub 구독/푸시, 이 이상의 고급 메시지 대기열 미들웨어 사용을 고려해 보셨나요?
기본 논리는 메시지가 데이터베이스나 다른 nosql에 캐시되어야 한다는 것입니다.
으아악메시지 센터를 분할하고 redis pub/sub 시스템이나 목록을 사용하세요. 메시지를 보내야 하는 다른 사람들은 redis를 통해 메시지를 보내도록 메시지 센터에 알립니다.
메시지 센터에서는 사용자가 온라인 상태인지 확인하고 온라인 상태가 되면 사용자에게 직접 메시지를 보내고(웹소켓 등을 통해 SSE도 사용 가능) 읽음으로 표시합니다
사용자가 온라인 상태이면 읽지 않은 메시지는 모두 가져옵니다
온라인 여부에 관계없이 모든 온라인 메시지는 데이터베이스에 저장되어야 합니다. . .
redis의 값은 문자열이므로 사용자를 구분하려면 json 문자열 값만 있으면 됩니다.
키는 메시지 유형을 보유합니다
값은 직렬화 후 딕셔너리와 같은 비즈니스 데이터를 보유합니다. 원하는 것을 원하는 만큼 넣을 수 있습니다. 그런 다음 꺼내서 역직렬화하여 직접 사용할 수 있습니다.