1 / 32

JABBER 를 이용한 메신저 개발

경희대학교 KHLUG 한국외국어대학교 GNUVILL. JABBER 를 이용한 메신저 개발. JABBER ?. XMPP 기반의 Protocol Instant Messenger 들이 가져야 할 모든 프로토콜 요소 를 포함 Jabber 를 지원하는 Client 는 모든 공개 Jabber 서버 에 접속 가 능. JABBER 의 구조. C1, C2, C3 = XMPP Client S1 , S2 = XMPP Server

overton
Download Presentation

JABBER 를 이용한 메신저 개발

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 경희대학교KHLUG 한국외국어대학교 GNUVILL JABBER를 이용한 메신저 개발

  2. JABBER? • XMPP 기반의 Protocol • Instant Messenger들이 가져야 할 모든 프로토콜 요소를포함 • \Jabber를 지원하는 Client는 모든 공개 Jabber 서버에 접속 가능

  3. JABBER의 구조 • C1, C2, C3 = XMPP Client • S1, S2 = XMPP Server • G1= XMPP와 외부 메시징 네트워크에서 사용되는 프로토콜들 사이의 Gateway • FN1= 외부 메시징 네트워크 • FC1= 외부 메시징 네트워크의 클라이언트

  4. JABBER의 구조 어떠한 Jabber public server에 위치하고 있더라도 다른 server에 있는 사용자와 대화 가능

  5. PROTOCOL의 예 Server advertises resource binding feature to client: <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='c2s_345' from='example.com' version='1.0'> <stream:features> <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'> </stream:features> Client asks server to bind a resource: <iq type='set' id='bind_1'> <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/> </iq>

  6. JABBER의 장점 • 전 세계 Jabber User와 대화 가능 • Google talk와 연동 가능(예정) • 인증 protocol로 messenger신뢰성 향상 • 기존 messenger와의 차별화 • Server및 ClientLibraries제공 • Protocol만 활용하는 것이 가능 • Protocol로 인한 문제를 미연에 방지 • XML 표준화로타 기능과 연동에 용이

  7. 향후 전망 • Google talk의 public server로 전환 예고 • 국제 인터넷 표준 기술 협회(IETF)의 인스턴트 메신저 표준 후보 중 하나 • 인텔, HP, AT&T 등의지원

  8. JABBER의 특징 Open

  9. JABBER의 특징 Extension

  10. JABBER의 특징 Security

  11. JABBER의 특징 Presence

  12. JABBER의 특징 XML

  13. JABBER의 구현 XMPP메시징프로토콜의 정의 - Messege교환 - Log-in 정보 교환 - User 초대 및 수락 - Budy List 관리 - 특정 User block

  14. JABBER의 구현 스키마의 종류 • namespacejabber:client jabber:server • type  chat, error, groupchat, headline, normal • <subject/> 언어 인코딩설정. xml:lang • <body/> 읽을 수 있는 메시지 • <thread/> 읽을 수 없는 메시지, 암호화된 코드

  15. JABBER의 구현 Presence의 종류(type) • unavailable : 통신 불가 • subscribe : 수락요청 메시지 • subscribed : User의 친구요청 수락 메시지 • unsubscribe : User제거 • unsubscribed : User의 친구요청 거부 메시지 • probe :User간의 관계 정보 • error : 패킷 전송 중 일어날 수 있는 에러

  16. JABBER의 구현 show의 종류(myStatus) • away: 자리비움 • chat : 채팅 중 • dnd: Busy • xa : 아주 멀리 갔을때(extended away) • status: User의 행동 상태 대한 설명 • priority: -128~127까지 int형 등급 변수 • Iq: 구조화된 요청/반응 메카니즘을증명

  17. JABBER의 구현 1. Session 설정 • 보통 클라이언트와 서버가 연결되면 세션이 설정 • Stream증명: 클라이언트는 세션이 연결되거나, 메시지 전송전 에 인증 • ResourceBinding ex) user@192.168.0.5/resource

  18. JABBER의 구현 1. Session 설정 서버가 클라이언트에게 세션설립을 위한 특징을 알린다. <stream:stream xmlns='jabber:client' // 클라이언트에게 xmlns:stream='http://etherx.jabber.org/streams' id='c2s_345' // 서버의 누군가의 아이디 from='example.com' // 서버 주소 version='1.0'> // 버전 <stream:features> // 즉 이 안에 있는게필요하다 <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/> <session xmlns='urn:ietf:params:xml:ns:xmpp-session'/> </stream:features>

  19. JABBER의 구현 1. Session 설정 Step 1: Client requests session with server: example.com 서버에게 sess_1 유저가 세션 연결 요청을 한다. <iq to='example.com' type='set' id='sess_1'> <session xmlns='urn:ietf:params:xml:ns:xmpp-session'/> </iq>

  20. JABBER의 구현 1. Session 설정 Step 2: Server informs client that session has been created: 서버가 sess_1 유저에게 세션이 생성되었다고 알린다. <iq from='example.com' type='result' id='sess_1'/>

  21. JABBER의 구현 1. Session 설정 Step 3: 만약 세션연결이 실패하면 실패 메시지를 반드시 보내야 한다. <iq from='example.com' type='error' id='sess_1'> <session xmlns='urn:ietf:params:xml:ns:xmpp-session'/> <error type='wait'> <internal-server-error xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/> // 서버에러 </error> </iq>

  22. JABBER의 구현 1. Session 설정 Step 4: 잘못된 아이디나 패스워드에 의해 세션연결이 안될 경우 <iq from='example.com' type='error' id='sess_1'> <session xmlns='urn:ietf:params:xml:ns:xmpp-session'/> <error type='auth'> <forbidden xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/> </error> </iq> // resource 란 패스워드같은 것 을 뜻함. // 즉 user@192.168.0.5/password

  23. JABBER의 구현 2. 메세지 교환 <message to='romeo@example.net' // romeo에게 from='juliet@example.com/balcony' // juliet로부터 user_id@address/resource //ID 및 Password type='chat' // 유형은 채팅 xml:lang='en'> // 메시지 인코딩 유형 <body>Wherefore art thou, Romeo?</body> // 메시지 바디 </message>

  24. JABBER의 구현 3. Presence에 대한 Client와 Server <presence xml:lang='en'> <show>dnd</show> <status>Wooing Juliet</status> <status xml:lang='cz'>Jadvo&#x0159;&#x00ED;m Juliet</status> <priority>1</priority> //가중치 부여 </presence>

  25. JABBER의 구현 4. Subscription - 다른 ClientUser에 친구 요청 <presence to='juliet@example.com' type='subscribe'/> - 친구요청 메시지 승낙 <presence to='romeo@example.net' type='subscribed'/> - 친구요청 메시지 거부 <presence to='romeo@example.net' type='unsubscribed'/> - 친구 삭제메시지 (클라이언트) <presence to='juliet@example.com' type='unsubscribe'/>

  26. JABBER의 구현 5.Roster 관리 ( 친구관리) // 서버에 현재 친구리스트를 달라고 요청한다. <iq from='juliet@example.com/balcony' type='get' id='roster_1'> <query xmlns='jabber:iq:roster'/> </iq>

  27. JABBER의 구현 5.Roster 관리 ( 친구관리) // 서버로부터 받은 친구 리스트 메시지 <iq to='juliet@example.com/balcony' type='result' id='roster_1'> <query xmlns='jabber:iq:roster'> <item jid='romeo@example.net‘ name='Romeo‘ subscription='both'> <group>Friends</group> </item> <item jid='mercutio@example.org‘ name='Mercutio‘ subscription='from'> <group>Friends</group></item> <item jid='benvolio@example.org‘ name='Benvolio‘ subscription='both'> <group>Friends</group> </item></query></iq>

  28. JABBER의 구현 5.Roster 관리 ( 친구관리) //친구 추가하기 <iq from='juliet@example.com/balcony' type='set' id='roster_2'> <query xmlns='jabber:iq:roster'> <item jid='nurse@example.com' name='Nurse'> <group>Servants</group> </item> </query> </iq>

  29. JABBER의 구현 5.Roster 관리 ( 친구관리) //이미 존재하는 친구 그룹 <iq from='juliet@example.com/balcony' type='set' id='roster_2'> <query xmlns='jabber:iq:roster'> <item jid='nurse@example.com‘name='Nurse'> <group>Friends</group> <group>Lovers</group> </item> </query> </iq>

  30. JABBER의 구현 5.Roster 관리 ( 친구관리) // 서버는 모든 이용가능한 리소스에게 이 수정된 정보를 전송한다. <iq to='juliet@example.com/balcony‘type='set‘id='a78b4q6ha463'> <query xmlns='jabber:iq:roster'> <item jid='nurse@example.com‘name='Nurse’ subscription='none'> <group>Servants</group> </item></query></iq> <iq to='juliet@example.com/chamber‘type='set‘id='a78b4q6ha464'> <query xmlns='jabber:iq:roster'> <item jid='nurse@example.com‘name='Nurse‘subscription='none'> <group>Servants</group> </item></query></iq> // 전송이 되면 결과 메시지를 클라이언트에게 전송한다. <iq to='juliet@example.com/balcony' type='result' id='roster_2'/>

  31. JABBER의 구현 5.Roster 관리 ( 친구관리) //nurse@example.com 이란 친구 삭제하기 <iq from='juliet@example.com/balcony' type='set' id='roster_4'> <query xmlns='jabber:iq:roster'> <item jid='nurse@example.com' subscription='remove'/> </query> </iq>

  32. Thank you!!

More Related