<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>-Flyぁ梦- &#187; im</title>
	<atom:link href="http://blog.11034.org/tag/im/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.11034.org</link>
	<description></description>
	<lastBuildDate>Sun, 22 Jun 2025 08:59:05 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.38</generator>
	<item>
		<title>jabber和XMPP简述原理</title>
		<link>http://blog.11034.org/2016-09/jabber_and_xmpp.html</link>
		<comments>http://blog.11034.org/2016-09/jabber_and_xmpp.html#comments</comments>
		<pubDate>Fri, 09 Sep 2016 10:43:45 +0000</pubDate>
		<dc:creator><![CDATA[-Flyぁ梦-]]></dc:creator>
				<category><![CDATA[Life in Coding]]></category>
		<category><![CDATA[im]]></category>
		<category><![CDATA[xmpp]]></category>

		<guid isPermaLink="false">http://blog.11034.org/?p=2868</guid>
		<description><![CDATA[为了实现不同IM（即时通讯软件，比如QQ、GTalk）之间可以互相通信，jabber和XMPP为此而生。jab [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>为了实现不同IM（即时通讯软件，比如QQ、GTalk）之间可以互相通信，jabber和XMPP为此而生。jabber是Linux中的一个程序，设计了一套开源的协议，用于连接不通的IM，然后XMPP以jabber协议为基础并扩展之。每一个IM程序服务端与客户端之间肯定有一套保密并加密的协议，这个是不可能容易让外部获知的，不然IM软件聊天内容就泄露了，谁还敢用。XMPP是让不同的IM之间互相通信，跟IM程序本身毫无关系。</p>
<p><span id="more-2868"></span></p>
<p>简单的说就是，QQ在自身服务器外，再搭建一个jabber服务器，GTalk也同理，分别称之为jabberQ和jabberG。QQ用户的标识以@qq.com即为，GTalk用户的标识以@gmail.com结尾。首先QQ用户想要与GTalk用户通信，QQ服务器发现这个请求要发给外部用户而非内部QQ用户，将请求转到jabberQ服务器，jabberQ服务器识别到此外部用户以@gmail.com结尾，需要知道jabberG服务器的IP地址是多少，通过DNS协议去查询gmail.com，其中的SRV Records有一项<code class="markdown_inline_code">_xmpp-server._tcp.domain</code>可以获知到对应的jabber服务器域名。</p>
<p>可以通过以下命令手动查询：</p>
<pre class="markdown_pre"><code>dig SRV _xmpp-server._tcp.gmail.com

;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 42765
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 4, ADDITIONAL: 4

;; QUESTION SECTION:
;_xmpp-server._tcp.gmail.com. IN SRV

;; ANSWER SECTION:
_xmpp-server._tcp.gmail.com. 900 IN SRV 20 0 5269 alt1.xmpp-server.l.google.com.
_xmpp-server._tcp.gmail.com. 900 IN SRV 20 0 5269 alt2.xmpp-server.l.google.com.
_xmpp-server._tcp.gmail.com. 900 IN SRV 20 0 5269 alt3.xmpp-server.l.google.com.
_xmpp-server._tcp.gmail.com. 900 IN SRV 20 0 5269 alt4.xmpp-server.l.google.com.
_xmpp-server._tcp.gmail.com. 900 IN SRV 5 0 5269 xmpp-server.l.google.com.

具体详见：<a href="http://wiki.xmpp.org/web/SRV_Records#XMPP_SRV_records" target="_blank">http://wiki.xmpp.org/web/SRV_Records#XMPP_SRV_records</a></code></pre>
<p>然后jabberQ服务器，就通过域名alt1.xmpp-server.l.google.com获取到IP地址去与jabberG服务器建立Socket连接了，当然通过XMPP协议规定的xml内容交互，所以jabberQ服务器会将QQ服务器内部的请求转化为开源的XMPP请求。经过jabberG服务器确认后，连接建立，之后的XMPP协议就可以欢快的走起来了，包括加好友、好友上线/下线状态通知、发消息等。jabberG服务器获取到来自jabberQ的XMPP通知后，将此XMPP请求转化为GTalk内部的数据请求转发给GTalk服务器，然后推送到GTalk客户端。</p>
<p>简单地说就这样子，QQ客户端到GTalk客户端的一次数据请求就完成了。</p>
<h4  class="related_post_title">随便看一看</h4><ul class="related_post"><li>2015-06-20 -- <a target="_blank" href="http://blog.11034.org/2015-06/huashan.html" title="战胜华山，一生平安">战胜华山，一生平安</a></li><li>2012-09-11 -- <a target="_blank" href="http://blog.11034.org/2012-09/shendiao_xialv.html" title="读神雕侠侣">读神雕侠侣</a></li><li>2013-11-25 -- <a target="_blank" href="http://blog.11034.org/2013-11/westlake_seasons.html" title="西湖四季">西湖四季</a></li><li>2010-07-28 -- <a target="_blank" href="http://blog.11034.org/2010-07/database_connetion_pool.html" title="数据库连接池之c3p0与dbcp">数据库连接池之c3p0与dbcp</a></li><li>2015-12-09 -- <a target="_blank" href="http://blog.11034.org/2015-12/lake_kussharo.html" title="幻境の屈斜路湖">幻境の屈斜路湖</a></li></ul><h4 class="related_post_title">看看 Life in Coding </h4><ul class="related_post"><li>2015-01-07 -- <a target="_blank" href="http://blog.11034.org/2015-01/prevent_db_duplicate.html" title="防止数据库数据重复的几种方法">防止数据库数据重复的几种方法</a></li><li>2014-10-25 -- <a target="_blank" href="http://blog.11034.org/2014-10/linux_timeout.html" title="linux的timeout处理wkhtmltopdf进程超时">linux的timeout处理wkhtmltopdf进程超时</a></li><li>2014-09-10 -- <a target="_blank" href="http://blog.11034.org/2014-09/dotnet_csharp_excel.html" title="记C#和Excel开发">记C#和Excel开发</a></li><li>2011-06-11 -- <a target="_blank" href="http://blog.11034.org/2011-06/google_doodle_guitar.html" title="2011-6-9 Google Doodle之电子琴">2011-6-9 Google Doodle之电子琴</a></li><li>2011-03-10 -- <a target="_blank" href="http://blog.11034.org/2011-03/learning_cs.html" title="学计算机的尼玛伤不起啊！！！！！！">学计算机的尼玛伤不起啊！！！！！！</a></li>]]></content:encoded>
			<wfw:commentRss>http://blog.11034.org/2016-09/jabber_and_xmpp.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
