<< Back to shouce.jb51.net

9.10. 安装Jabberd服务器

Jabber是一个IM(即时通信)服务器,使用开放的XMPP协议,它的信息流是XML格式的,可实现跨平台通信。通过Jabber转换器,Japper还可与MSN,Yahoo等即时通信服务器连接。一举打破现时IM平台互不兼容的格局。Google talk就是使用Jabber/XMPP来实现的。

Jabber服务器软件有很多种,具体可到这个网址查询:http://www.jabber.org/software/servers.shtml。其中jabberd是用C写的一个Jabber服务器,在Debian中有一个jabber软件包可安装jabberd1.4.3服务器。现在最新的jabberd是2.x版本的,包含了jabber的最新功能,但支持的组件较少,jabberd1.4.x版本中没有包含最新的功能,如不支持SASL。但它的支持组件很多,而且很稳定。所以这里我以jabberd1.4.3版的jabberd服务器进行介绍。

用Debian标准的软件安装方法即可完成软件包的下载和安装。

debian:~# apt-get install jabber

安装完软件后,jabberd服务就会自动启动。我们可用telnet程序与服务器连接测试一下服务器是否能正常工作。

debian:~# telnet localhost 5222   #5222是jabberd服务的默认端口号
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

在上面的状态下输入以下xml文本内容:

<stream:stream
  to='localhost'
  xmlns='jabber:client'
  xmlns:stream='http://etherx.jabber.org/streams'>

按回车,jabber服务器会显示如下信息:

<?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' id='431E92B1' xmlns='jabber:client' from='localhost'>

如果出现如下的信息,则说明jabberd服务器已正常运行。我们可用</stream:stream>语句关闭信息流,退同telnet状态。。

下面我们可以开始配置jabber服务器。jabber的配置文件在/etc/jabber目录下,叫jabber.xml。首先,我们需配置主机名,上面我们是用localhost主机名来测试的。正式使用的话需要有一个唯一的名称来标识该服务器。用vi程序打开该文件,找到这句:

 <host><jabberd:cmdline flag="h">localhost</jabberd:cmdline></host>

把localhost改成你的主机名,我的主机名是debian,存盘退出。现在我们就可用主机名来访问jabberd服务了,如:

debian:~# telnet debian 5222
Trying 127.0.0.1...
Connected to debian.      #主机名已改变
Escape character is '^]'.

现在我们可以添加一个jabber帐号了,我们可以通过gaim之类的jabber客户端软件自动添加,也可手动方法添加。下面介绍用telnet手动添加的方法,这种方法可让我们详细了解jabberd服务的添加用户的处理过程。

debian:~# telnet debian 5222
Trying 127.0.0.1...
Connected to debian.
Escape character is '^]'.
<stream:stream 
to="debian"
xmlns="jabber:client"
xmlns:stream="http://etherx.jabber.org/streams">

系统显示以下信息:

<?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' id='431E9B0B' xmlns='jabber:client' from='debian'>

使用以下XML查询注册需提供些什么信息:

<iq id='reg1' type='get'>
  <query xmlns='jabber:iq:register'/>
</iq>

查询的结果如下:

<iq id='reg1' type='result'>
  <query xmlns='jabber:iq:register'><password/><password/>
        <instructions>Choose a username and password to register with this server.</instructions>
        <name/>
        <email/>
      <username/></query>
</iq>

这里显示注册需提供password,username,email和name四项信息。下面我把按要求把注册信息发给服务器:

<iq id="reg2" type="set">
<query xmlns="jabber:iq:register">
<username>test</username>
<password>12345</password>
<name>test</name>
<email>test@debian</email>
</query>
</iq>     #在这里按回车,如果出现以下信息,则说明注册成功。
<iq id='reg2' type='result'/>

每个注册用户的信息保存在/var/lib/jabber/目录下。现在我们可以用刚注册的帐号登录jabber服务器了,在登录之前,我们可用以下XML命令查询服务器登录需要些什么信息:

<iq id="auth1" type="get">
<query xmlns="jabber:iq:auth">
<username>test</username>
</query>
</iq>

返回的信息如下:

<iq id='auth1' type='result'>
<query xmlns='jabber:iq:auth'>
<username>test</username>
<digest/><password/><resource/></query>
</iq>

<digest/>和<password/>分别表示加密格式的密码和纯文本格式的密码,只需选其中一种即可。<resource>是必须填的,表示连接服务的资源,如我们现在采用的telnet。登录的XML命令如下,我们采用的是不加密的密码方式:

<iq id="auth2" type="set">
<query xmlns="jabber:iq:auth">
<username>test</username>
<password>12345</password>
<resource>telnet</resource>
</query>
</iq>         #这里按回车,如果出现以下信息,则说明登录成功。
<iq id='auth2' type='result'/>

最后,我们要把test用户切换到在线状态。

<presence/>          #按回车后会显示以下的欢迎信息
<message from='debian' to='test@debian'>
        <subject>Welcome!</subject>
        <body>Welcome to the Jabber server -- we hope you enjoy this service! For information about how to us
e Jabber, visit the Jabber User&apos;s Guide at http://jabbermanual.jabberstudio.org/</body>
      <x xmlns='jabber:x:delay' from='test@debian' stamp='20050907T08:01:29'>Offline Storage</x></message>

现在,我们就可发送和接收信息了。发送信息的XML命令格式如下:

<message to="jims@debian">
<body>hello jims</body>
</message>

如果jims用户已在gaim中登录,则会显示“hello jims”的信息。如果在gaim中发一条叫“hello test,this m essage form gaim.”给test@debian,则会在telnet里收到如下格式的信息:

<message type='chat' to='test@debian/telnet' from='yangjing@debian/Gaim'><x xmlns='jabber:x:event'><composing
/></x><body>hello test,this message form gaim.</body><html xmlns='http://jabber.org/protocol/xhtml-im'><body 
xmlns='http://www.w3.org/1999/xhtml'>hello test,this message form gaim.</body></html></message>

用以下命令可退出会话:

</stream:stream>

从上面的信息可以看到,在jabber传送的信息流是XML格式的。这为jabber服务的扩展提供了很好的发展空间。