2016년 11월 22일 화요일

Meteor DDP subscribe 처리 시 주의할 점

Meteor에서 logout 시 독특한 패턴으로 websocket이 날아오기 때문에 주의해야한다.

먼저 logout을 보내면
["{\"msg\":\"method\",\"method\":\"logout\",\"params\":[],\"id\":\"3\"}"]

가입 되있던 모든 publish에 영향 받는 collection이 removed 된다.
a["{\"msg\":\"removed\",\"collection\":\"users\",\"id\":\"ySWmTt329QeLQZTEc\"}"] 80
23:56:26.494
.........

a["{\"msg\":\"ready\",\"subs\":[\"CPSzK3DsirQq4fSmo\",\"87ojrAZZKFwu9LTeH\",\"5ynAG9oTZg7i3DMCs\",\"KZBaQRzyPiF33BoLz\",\"w3JwjFeWaFmxXiiaL\",\"ZM9oXYRjZ7cfSxvMY\",\"Q7XAmPJC35NjLdBYL\"]}"] 189
23:56:26.529

정체불명의 subs 가 array로 뭉텅 날아오고

a["{\"msg\":\"updated\",\"methods\":[\"3\"]}"] 46
23:56:26.530

logout method 에 대한 updated 와

a["{\"msg\":\"result\",\"id\":\"3\"}"]

result 가 id번호 3을 알려주면서 떨어진다.

여기에서 조심할 것이 subscribe ready 일때 무언가 처리를 해놓았다면 (가령 login등)
logout 할때 array랑 겹치지 않게 조심해 줘야할 필요가 있다.

Rx의 Subscirbe로 묶어 놨으면 반드시 안에서 unsubscribe / dispose 를 하자.