팀원이 설정한 알람이 내 전화기에서 울리기로 되어 있었습니다.

팀원이 설정/변경한 알림이 내 폰에서 울려야 합니다.

소개

모든 프로젝트가 실행된 후 계획은 폐기되었습니다.

기획팀에 다른 서비스와의 경계와 방향이 명확하지 않다고 말씀드렸지만 이런 결과는 바라지 않았습니다.

. ㅠㅠ

지인들에게 기획팀을 흔들어 보라는 말을 많이 들었는데, 더 좋은 결과를 위해서라서 좋은 것 같아요.

개선된 계획은 다음과 같습니다.

열정은 있지만 팀 프로젝트를 실행할 사람이 필요한 사람들을 위해 TODO 및 캘린더 기능과 팀원을 찾을 수 있는 커뮤니티를 제공합니다.

여기 TODO 및 캘린더 기능은 팀에서 정의할 수 있습니다.

자신 외에 팀원이 추가하고 수정한 알람은 내 전화기에서 울려야 합니다.

메인 테마

FCM을 사용할 수 있었지만 학생으로서 구현 경험을 쌓고 싶었습니다.

내 연구에 따르면 프로젝트에 대한 팀 알림을 위한 가장 좋은 방법은 다음과 같습니다.


이와 같이 서버에서 추가된 알람을 클라이언트에 알리는 방법은 3가지가 있습니다.

  • 여론 조사
  • 전원 콘센트
  • SSE(서버 전송 이벤트)

결과는 알람 기능을 구현할 때는 SSE 방식이 가장 적합하다.

하다.

여론 조사

폴링은 단순히 API를 주기적으로 여러 번 호출하여 변경 여부를 확인하는 방법입니다.

폴링 방법의 예로는 Node.js 동기 및 비차단 방법이 있습니다.

(다른 방법도 있는데 Node.js는 왜 다른 방법을 사용하는지 궁금합니다.

)

유사한 제품으로 긴 투표 절차가 있지만 투표와 유사하기 때문에 통과됩니다.


쿼리 방법

폴링 방식은 여러 번 호출해야 하기 때문에 통신 비용이 증가합니다.

전원 콘센트

소켓 방식의 예로는 채팅이 있습니다.

Node.js는 socket.io 함수를 제공하므로 이 함수를 사용하여 쉽게 생성할 수 있습니다.

통신 프로세스는 다음과 같습니다.


이렇게 하면 폴링 방식에 비해 효율적으로 구현할 수 있다.

그러나 이 방법은 꽤 어려운 방법오전. 다음에 설명 SSE 방법보다 효율적으로 구현할 수 있습니다.

서버 전송 이벤트(SSE)

소켓이 가입한 대화방에서 양방향으로 메시지를 보낼 수 있습니다.

국수,
SSE는 클라이언트에서 서버로한 방향으로 메시지를 보낼 수 있습니다.

왼쪽: SSE 예시 / 오른쪽: 디자인

다음 SSE를 사용하여 경고 업데이트를 개발하려고 합니다.

그렇다면 알람 기능은 어떻게 구현해야 할까요?

SSE를 사용하여 클라이언트에게 알람 업데이트를 알릴 수 있습니다.

나온 순서도는 다음과 같습니다.


  • 각 구성원은 자체 SSE를 가집니다.

  • 내가 속한 팀에서 경고 변경(추가 및 삭제 포함)이 발생하면 SSE를 통해 알림을 받게 됩니다.

팀별로 SSE가 있는 경우도 생각했는데 저희 리셉션 앱이 자바라서 서버에 구현해서 앞부분의 부담을 조금 덜려고 합니다.

.

연구에서 구현까지 2시간 걸렸습니다!

코드베이스 공유

@Controller()
export class TodoController {
    constructor(
    private readonly todoAlarmService: TodoAlarmService,
    ) {}
	
    @Sse('/sse/:userId')
    connectSSE(@Param('userId', ParseUUIDPipe) userId: string) {
    return this.todoAlarmService.connectSSE(userId);
    }
}

import { Injectable } from '@nestjs/common';
import { Observable, Subject } from 'rxjs';

@Injectable()
export class TodoAlarmService {
  private events = {}; // 열려있는 SSE, 객체로 관리중

  connectSSE(userId: string): Observable<any> { // SSE 연결
    if (!
this.events(userId)) { // 없으면 만들고, this.events(userId) = new Subject(); } return this.events(userId).asObservable(); // 연결 시킨다.

} sendEvent(userId: string) { // SSE에 이벤트 던지기 if (!
this.events(userId)) { // 없으면 만들고, this.events(userId) = new Subject(); } this.events(userId).next('alarmChanged' + new Date().toString()); // 요걸로 던질 수 있음. } }

참조 참조