Subscription

hwakyungChoi·2021년 9월 14일
0

  • GraphQL의 오랫동안 지속되는 read operation 으로 서버에 있는 것이 무엇이든 항상 listen 하도록 해줌
    - 조건이 충족하면 push
    • real time
    • web socket에 기반
  • 가장 필요한 조건은 Pubsub Class(PubsubEngine,public subscribe engine)가 있어야 한다는 점
    - 다만 실제 개발에서는 사용을 추천하지 않음
    • 실서비스에서는 redis 사용 추천

코드 예시

  • typeDefs 에서는 아래와 같이 설정
export default gql`
	type Subscription {
		roomUpdate:Message
	}
`
  • resolver에서는 subscribe 함수를 추가해줘야 함
export default {
  Subscription: {
    roomUpdates: {
      subscribe: () => pubsub.asyncIterator(NEW_MESSAGE),
    },
  },
};
  • 다만 subscription에서는 ws으로 보내줘야함
    - http/https 는 stateless한 상태로 request에 대한 응답이 오고 그걸로 모든게 끝남
    - 웹소켓은 connect을 열고 유지하며 실시간으로 주고받음
    - 웹소켓에 대해서 서버에 설치해야 함
    apollo.installSubscriptionHandlers(app);
  • 이벤트를 publish 하기 위해서
    - payload는 subscription의 이름이여야 함
    pubsub.publish(NEW_MESSAGE, { roomUpdates: { ...message } });
    
 - subscription은 언제 써야 할까?
 	- 큰 규모의  object는 작지만 계속적으로 증가하는 변화가 있을 때 
    - 저지연의 실시간 업데이트가 필요할 때
        
        
- withFilter
	- 이벤트를 어떻게 필터할 것인지
``` javascript
subscribe: withFilter(
        () => pubsub.asyncIterator(NEW_MESSAGE),
        ({ roomUpdates }, { id }) => {
          return roomUpdates.roomId === id;
        }
      ),

0개의 댓글