자유게시판

제목 xmpp 관련해서 작업중입니다.
글쓴이 DRS 작성시각 2014/03/22 00:57:37
댓글 : 2 추천 : 1 스크랩 : 0 조회수 : 13012   RSS
 최근 진행중인 프로젝트에서 push기능구현에 있어서 이것저것 손대고 있습니다
원래 자바스크립트에서 타이머 이벤트를 걸어서 1분에 한번씩 폴링 하도록 구현했는데
1분에 한번씩 디비를 셀렉트 해야하는거 너무 낭비인거 같아서 push기능을 구현할 수 없을까 하고 찾아보니
xmpp라는 메신저나 채팅에 주로 사용하는 프로토콜이 있더군요.

사실 이전에도 알고 있었지만 구글링해도 제 입맞에 맞는 자료는 찾기가 힘들어서 도중에 포기했는데
이번에는 3일정도 공을 들여서 작업을 했습니다.

서버는 유명한 openfire가 아닌 ejabberd를 사용했습니다.
openfire는 java기반이라 그런지 너무 무겁더라구요.

클라이언트쪽은 웹이기 때문에 strophe.js를 사용했습니다.
php쪽은 xmpphp를 사용했구요.

간단한 예제를 작성하고 돌려보니 꽤 잘 되더라구요 하지만! 여기서 부터 고생시작

첫번째로 60초가 되면 무조건 연결이 끊어졌습니다.
모든 설정을 다 바꾸고 코딩을 새로 해보고 서버 옵션도 다 바꿔봐도 전혀 해결이 안되더군요.
근데 엉뚱하게도 문제는 전혀 다른곳에서 나왔습니다.
개발 서버의 경우 haproxy로 앞단에서 L7 역할을 하고 있는데 요부분에 60초 타임아웃이 설정되어 있었습니다 ㅠ
이걸 xmpp요청의 경우 풀어주니 바로 해결되네요 ㅠ

두번째로 서버와 웹서버가 다른 호스트를 사용하다보니 strophe.js의 ajax가 크로스도메인 문제가 생기더군요.
이건 검색결과 flXHR이라는 플래시를 이용한 꼼수가 있는데(공식 예제에 포함됨) 데스크탑에서 잘되서 아 잘 되나보다 라고 생각했습니다만 모바일 환경에서 플래시가 안되서 그런지 작동을 안하더군요... 
다시 폭풍 검색 시작 6시간정도 흐려지는 정신을 가다듬고 익숙하지 않은 구글의 영문들을 보며 거의 포기하려는 순간 jsonp와 php의 curl을 응용한 jXHR을 발견! 원리는 간단하더군요 같은 호스트에 프록시 역할을 하는 php파일을 두고
요 php에서 curl과 jsonp를 이용한 크로스 도메인 극복 시나리오 였습니다. 적용도 한방에 되었고
프록시 php도 ci의 컨트롤러와 뷰로 구성해서 멋지게 해냈다 싶었죠 하지만 jsonp 특성상 비동기 방식이 아닌 동기방식으로 호출을 하는데 이놈이 반응(메세지를 수신하거나 keep alive동작)할 때 까지 모든 ajax 요청이 pending이 되어버렸습니다.
와 이거 정말 멘붕이었죠. 구글링결과 브라우저의 호스트 접속 최대수가 부족해서 그렇다? 이 문제인줄 알았는데 1일정도 다방면으로 테스트 해본결과 그문제가 아닌 php의 세션을 담당하는 쿠키 문제였습니다.
쿠키가 fopen(?) 되어있는 상태로 pending이 걸리니 다른 모든 요청도 pending상태가 되어버리더군요. 이부분은 컨트롤러 맨 앞단에 쿠키를 닫아주니 바로 해결.. 딱 한줄 코딩으로 해결됐습니다.

세번째로 유저를 등록하는 문제였는데.
커맨드로 직접입력하는건 정말쉬운데 xmpp의 iq기능을 이용해서 php에서 유저를 등록하는데 문제가 생겼습니다.
한번 등록이 되면 한동안 안되고 또 되고 안되고 이런현상이 저를 슬슬 지치게 만들더군요.
이거 역시 폭풍 구글링한 결과 서버자체에서 10분에 한번만 등록하게 기본세팅이 되어있더군요 역시 바로 해결

비록 IT경력이 길지는 않지만 정말 잊지 못할 짜릿한 경험중 하나가 되었습니다.
구글을 보니 제가 겪었던 문제를 세계인들이 똑같이 겪었고 고생한걸보니 외롭지는 않다라는 생각이 들었습니다.

휴 적고 나니 정말 글쓰는 실력이 없군요.
혹시나 xmpp때문에 고생하시는 분은 없겠지만 웹앱등에서 사용하기 위해 관심이 있는 분들이 계시다면 제가 조금은 도움을 드릴 수 있을거 같습니다.

좋은 주말 보내시구요 고맙습니다.
 다음글 시간을 달리는 프로그래머 (3)
 이전글 프로그램 다운로드 중 멈춤현상

댓글

변종원(웅파) / 2014/03/23 00:56:14 / 추천 0
웹 채팅을 구현해야할 일이 생겼는데 xmpp프로토콜 찾봐야겠네요.
감사합니다. ^^
이정훈 / 2015/01/30 22:12:05 / 추천 0
헐 비슷한 상황을 검색하다
영문이 어려서 혹시나 해서 
검색조건을 한글로 해서 보니 여기 이렇게 좋은 정보가 있네요.ㅎㅎㅎ
감사합니다.