6
23
2013
9

基于 xmpptalk 的 XMPP 群搭建教程(以及对 Google Hangout 的吐槽)

本文来自依云's Blog,转载请注明。

目录

功能要点

  1. 自由开放的即时聊天协议。XMPP 服务和邮件服务一样,有服务器就可以搭建,服务器间可以相互通信。世界上有不少免费的 XMPP 服务器(列表Arch Linux CNDuckDuckGo)。
  2. 多人实时文本聊天。因为群组的实现由开发者完成,所以开发者可以附加上各种功能,比如暂时接收消息等。
  3. 因为是开放的协议,各种平台上都有不少客户端可用:Windows:Miranda IM;Linux/BSD:Pidgin、Empathy、kopete、kde-TelePathy、finch(终端);Android:xabberjabiru;Mac OS X:Adium 等;Web:jappix
  4. 因为是开放的协议,有各种编程语言的程序库,可方便、高效、光明正大地编写新的客户端或者聊天机器人。

一些缺陷

  1. XMPP 只适合传输文本。图片通常需要手工或者使用客户端插件贴到图床上,以链接的方式分享。
  2. 这是一个通过机器人(由程序控制的聊天客户端)模拟的群组。查看群成员信息等需要向群里发送特殊的命令。
  3. 暂不支持富文本(HTML)消息。这意味着你消息中的颜色、字体变化不会呈现给其他人。同时也意味着带链接的文本无法正常传输。通常,客户端会把链接地址写在相应的文本之后。不幸的是,从诸如维基百科直接复制的富文本包含大量链接,在「纯文本」化后的文本相当混乱。因此,多于一个的这样的链接会被 xmpptalk 去除。
  4. 群管理命令尚不完善,比如添加管理员需要直接修改数据库。
  5. 搭建过程比较麻烦和山寨。
  6. 目前仅支持在 Linux 系统上运行。

关于 Google Talk 及 Hangout

  1. Google Talk(Gtalk)是由 Google 公司提供的带自己的修改的 XMPP 服务,以及其 Windows 客户端和 Gmail 中内嵌聊天工具。它可以与 XMPP 群等通常使用非 Google 服务器的用户通讯
  2. Google Hangout (中文称「环聊」)是最近 Google 在配合 Google+ 服务推出的一种即时聊天服务,有 Google+ 网页版、Gmail 内嵌版(新版)、Android 客户端、iOS 客户端等。Hangout 不是 XMPP 服务。非 Google 用户能够看到使用 Hangout 在线的用户,但是发送的消息不会被 Hangout 接收到,只有当用户使用 XMPP 客户端登录时才能收到这些消息(如果用户没有禁用消息历史记录的话)。Google 用户之间发送的离线消息只会在 Hangout 和 Gmail 的聊天记录中出现,即使双方都使用 XMPP 客户端登录也不会收到这些离线消息。
  3. 「环聊」的意思就是,Google 画了个圈,圈子里边的 Google 用户才能够如预期地相互通信。「Hangout」的意思是,把不愿意使用 Hangout 的用户都「挂出去」,不缠他们玩儿了。

关于 Google 的 XMPP 服务的注意事项

  1. Google Apps 域名只能使用 Google 提供的 XMPP 服务。另建的 XMPP 服务会被 Google 拒绝建立服务器间连接。
  2. Google Apps 域名关于 XMPP 服务的设置页只说明了服务器间通讯(s2s)的 DNS 设置,缺乏 XMPP 客户端所需要的 DNS 设置。
  3. Google 的 XMPP 服务的设计目的是给人用的,不是给机器人用的。如果一个帐号在短时间内向单一联系人发送大量消息(上次测定是一分钟15条以上),那么之后的消息会被忽略。过一段时间后恢复。如果消息中包含链接或者「@」符号(邮件地址会包含的字符),那么限制更加严格,一分钟内只能外发几十条这样的消息(向任何数量的目标)。
  4. Google 的 XMPP 服务不允许用户向未订阅用户(互加好友的用户)发送消息。而一般 XMPP 服务允许此类消息,就像你有了对方的邮件地址就可以向其发送邮件一样。
  5. Google Talk 软件的「Remove」操作仅仅从好友列表中移除好友,并不会向对方发送取消订阅的消息。所以,Google Talk 用户在退出 xmpptalk 群时请使用专门的「-quit」命令。
  6. Google Talk 105 及以上版本(包括从官网下载的中文版、通过升级得到的中文版)实质使用的是 HTTP 协议明文传输数据。Google Talk 104 版本才会真正地使用加密版的 XMPP 协议。

搭建前的准备工作

  1. 需要一个给群机器人使用的 XMPP 帐号。基于已述的理由,强烈反对使用 Google 帐号搭建 XMPP 群。如果有自己的服务器,可自行搭建。推荐的 XMPP 服务端软件是 Prosody
  2. 需要一个长期在线的服务器或者 VPS。此服务器不需要能够响应外网请求。至少 50M 的空闲内存,以及约几百兆的磁盘空间。

软件安装

暴力安装法

运行 xmpptalk 中的scripts/quickinstall.sh即可。如果它没有中途出错而停下的话就恭喜你了!需要 root 权限,会从官方下载源码编译安装,东西会全部往/usr/local下装。不喜勿用,仅作参考。

MongoDB

MongoDB 是 xmpptalk 所使用的数据库。从软件源或者官方下载安装即可。

如果是从官方直接下载的,其配置可参考scripts/mongodb.conf.example文件。给mongod传递--fork参数作为服务在后台运行,传递--repair参数来从非正常关闭中恢复。

Python 及相关库

xmpptalk 需要 Python 3.2 或者以上版本。如果软件源中没有合适的版本,可从源码安装。编译方式可参考scripts/quick_install.sh脚本。

xmpptalk 依赖以下 Python 库。如果是手动安装,请使用准备运行 xmpptalk 的那个版本的 Python 来安装。注意手工安装的 Python 的话,你需要首先安装 distribute。手工安装时,可通过 easy_install(-3.2/-3.3) 来安装,也可手工安装。

  • pyxmpp2
  • dnspython
  • pymongo
  • mongokit

比如:

easy_install-3.3 pyxmpp2
easy_install-3.3 dnspython
easy_install-3.3 pymongo
easy_install-3.3 mongokit

MongoKit 不支持 Python 3,但是可以通过2to3程序来转换。在其安装目录执行2to3 -w .命令即可。例如:

dir=$(python3 -c 'import imp; print(imp.find_module("mongokit")[1])')
cd "$dir"
2to3 -w .

xmpptalk 的安装

xmpptalk 暂时还不支持安装 -_-|||

从仓库取回其源码即可使用。源码主页地址:github, bitbucket, geakit

直接克隆或者下载:

git clone https://github.com/lilydjwg/xmpptalk.git
# 或者
git clone https://geakit.com/lilydjwg/xmpptalk.git
# 或者从 github 下载源码包
wget https://github.com/lilydjwg/xmpptalk/tarball/master

配置和运行

请将 xmpptalk 源码中的config.py.example文件复制为config.py,然后使用文本编辑器修改。搜索「TODO」字样来寻找你非常可能需要修改的配置项。

在第一次运行前,需要对数据库进行初始化。首先启动 MongoDB,然后运行以下命令(该命令可反复运行,因此如果出错,在修正错误后再次运行即可):

python3 dbman.py

运行 xmpptalk 群。如果你不介意它占据一个终端的话(比如你有 tmux 或者 screen),可直接运行主文件。此种情况你可以看到日志消息,所以第一次运行使用此种方式以确定配置无误:

python3 main.py

如果需要后台运行,只需要加上--fork参数。

在它运行起来后,你就可以将群(使用你配置的 Jabber ID(JID))添加为好友啦。添加好友后请同意机器人添加你为好友,就会收到欢迎消息了,不需要发送任何额外的消息。让你的朋友们也加入进来吧!

常用命令简介

群使用一些减号「-」开头的字符串来进行一些操作。注意:减号前一定不能有空白字符。不小心忘了这些命令也没关系,大喊一声「help」群就会救你了 :-)

  • -nick XXX:将你自己在群里的昵称修改为XXX。直接发送-nick来查看自己当前的昵称。
  • -online:有哪些人在线呢?
  • -longhelp:查看完整的命令列表。

彩蛋:

  • test:测试群和你还能正常通信不(也许你已经掉线了?)
  • ping:类似test消息,但是同时还会告诉你当前(服务器的)日期和时间。如果暂停接收消息了,此消息会导致暂停状态被取消。

更多的内容就留给读者自行探索吧 ^_^

test@vim-cn.com 这个是 vim-cn 的技术群,讨论 Vim 或者编程技术,或者程序员的喜怒哀乐都可以来的哦 ^_^ (之所以叫「test」,是因为它最开始是 xmpptalk 的测试用群)

Category: Linux | Tags: linux python XMPP | Read Count: 44049
Star Brilliant 说:
Jun 23, 2013 06:58:43 PM

哈哈,我暑假要重构我的 chatlist,要实现很多以前从未有过的功能哦!(比如机器人协议)

mapleray 说:
Jun 23, 2013 10:27:40 PM

现在突然发现仙子的博文不是全文输出~~

Star Brilliant 说:
Jun 23, 2013 10:35:31 PM

同发现。我在用 InoReader 阅读器。

Avatar_small
依云 说:
Jun 23, 2013 10:56:37 PM

是只有目录么?我觉得这么长放在首页太碍眼了,于是在目录后加了个 <!-- more --> 标记……

Star Brilliant 说:
Jun 23, 2013 11:01:25 PM

原来如此。我是RSS阅读的,只显示目录部分。

mapleray 说:
Jun 23, 2013 11:35:11 PM

用的feedly,只有目录部分~~~

TonySeek 说:
Jun 24, 2013 04:38:41 AM

feedbin.me 也是,打开 "view original inline" 才显示出正文,但是目录又没了。

Avatar_small
依云 说:
Jun 24, 2013 11:15:34 AM

那个难道是它自己抓取的正文?然后抓取的时候我还没做目录所以就没了?

御宅暴君 说:
May 20, 2014 04:28:41 PM

終於看懂此文了,噢耶!

XMPP 比 IRC 還小衆冷門難用。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

部分静态文件存储由又拍云存储提供。 | Theme: Aeros 2.0 by TheBuckmaker.com