2. XMPP
The Extensible Messaging and Presence Protocol
Real-Time IM, 그룹 채팅, 주소록, 상태확인, 음성/영상 통화
Jeremie Miller (1998)
XML Based
Open Standard(예 : TCP/IP, HTTP, SMTP ...)
IETF RFC 3920, RFC 3921 (2004년)
RFC 6120, RFC 6121, RFC 6122 (2011)
RFC 7395 WebSocket(2012)
XMPP.ORG 최신 버젼 확인 가능
3. XMPP Server
AGPLv3
- 수정 소스 코드 public 공개 (범위 확인 필요
)
- 구입 하게 되면 공개 안해도 됨
Apache License 2.0
- 소스 코드 공개 의무 없음
10. XML Stream step-by-step
1. Stream 시작
2. 인증
3. Resource and Session 설정
4. 주소록 가지고 오기
5. Presence 업데이트
6. 메시지 보내기
11. Stream 클라이언트 시작
①<stream:stream 으로 시작
②JID의 domain 정보만 입력(virtual server)
③default namespace
④stream namespace
⑤XMPP version (항상 1.0)
<stream />를 닫지 않고 다른 element 추가. 세션 끊을 때
</stream:stream>
<stream:stream
to='chat.tts.com'
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'
version='1.0'>
①
②
③
④
⑤
12. <?xml version='1.0' encoding='UTF-8'?>
<stream:stream xmlns:stream="http://etherx.jabber.org/streams"
xmlns="jabber:client"
from="chat000"
id="9s0vb2xznv" xml:lang="en" version="1.0">
<stream:features>
<mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
<mechanism>DIGEST-MD5</mechanism>
<mechanism>SCRAM-SHA-1</mechanism>
<mechanism>PLAIN</mechanism>
<mechanism>ANONYMOUS</mechanism>
<mechanism>CRAM-MD5</mechanism>
</mechanisms>
<compression xmlns="http://jabber.org/features/compress">
<method>zlib</method>
</compression>
<auth xmlns="http://jabber.org/features/iq-auth"/>
<register xmlns="http://jabber.org/features/iq-register"/>
</stream:features>
Stream 서버 응답
Stream features 정보
① server domain
② unique stream id
③sasl(Simple Authentication and Security Layer)
통해 인증.
④데이터는 zlib로 압축
①
②
③
④
22. Message Type
normal 즉시 배달되는 메시지. 상대가 오프라인 일때 서버에 저장.
1:1/그룹 채팅방과 상관없이 받는 메시지 (예 : 네이트온 쪽지)
chat 1:1 대화. 오프라인 일때 서버 저장, 온라인 일때 메시지 수신
groupchat 그룹채팅
headline 공지사항 메시지. 상대가 오프라인 이어도 서버에 저장 안함
error 바로 전의 message에 대한 에러 상태
out-of-band <message> element 안에 X element. 일반적으로 파일 다운로드 경로,
FTP 경로, URL 링크, App 다운로드 링크
Jabber는 xmpp 의 다른 이름. 전형적인 client-server 구조. 주요 core 기능, 비즈니스 로직을 server 쪽에서 구현하는 것이 xmpp의 철학인데.. But Case by case
Xmpp server는 email 서버처럼 자기 도메인으로 들어온 이메일을 처리하고 보내주는 것처럼 xmpp server도 비슷하게 동작한다. Ssg.com의 도메인을 사용하고 있는 전영규가 서동훈 한테 메시지를 보내주거나 받아줄 수 있도록 한다.
다른 서버와 federation 즉 연합을 구축할 수 있는데요. 예를 들어ssg.com 도메인을 가지고 있는 회원이 couping.com 으로 등록한 회원과 메시지를 주고 받을 수 있다. 쉽게 얘기 하면 xmpp 프로토콜을 사용 하고 있다면 다른 조직과 메시징 전달이 가능함. 예를 들어 msn, facebook, 네이트온 끼리는 서로 메시지를 못 주고 받지만 xmpp를 사용하면 가능함.
하나 서버당 하나의 도메인 끼리만 메시지 전달이 가능 하도록 되어 있는데.. Virtual server 사용하게 되면 여러 도메인도 하나의 장비에서 운영할 수 있다. 우리 기획 요건 중에 동일 App 끼리만 대화가 가능 하다고 하였는대… ssg.com, emart.com, shinsegae.com 이렇게 JID를 분리하여 대화 가능 함.
나중에 SSG로 통합 한다고 할때는 하나의 JID만 발행하여 메시지 통합 가능