`

为什么要自己架个"gtalk"服务器

 
阅读更多
为什么要自己架个"gtalk"服务器

如果你也因为不使用QQ,同时偶尔有即时通信的需要,GTALK又被隔在GFW下时而不能登录,那么可以试试自己架设一个服务器。

GTALK基于一种开源通用的聊天协议,叫做jabber,或者XMPP。凡是遵循jabber协议的服务器和遵循jabber协议的客户端都能相互通信,这样的免费开源服务器和客户很多。

服务器之间可以连接起来彼此通信,还可以与msn等聊天工具互通。在这里,我只架单个服务器,容纳几个账号。

各种感慨都在最后,非技术人员请从此跳过,方法是按END键。

1. 选型

很多种服务器,著名的有 jabberd2, jabberd14, openfire。我用了openfire,因为1.它支持web管理界面,偶尔远程管理的时候工具容易选择;2.支持ssl/tls,通信安全;4.有deb包,ubuntun容易安装;5.基于java虚拟机,也可以在windows上跑。

客户端也有很多种,我用得少,感觉不到太多差别。为了测试,我这次安了gajim,平时主要用emacs-jabber。

2. 安装

安装真是没啥可说的,下载openfire_3.7.1_all.deb,[http://download.igniterealtime.org/openfire/openfire_3.7.1_all.deb],然后装上。

3. 运行

这个麻烦点。起初,各种毛病,反正我没运行起来。

网上说openfire的手册要比jabberd*要好,不过我没空看。比如存储账户信息,我希望使用内置的数据库,不想用mysql。因为顶多10个账户以下,而且跑在我的笔记本上,根本不想为此架个mysql server。但是,报错,说内置数据库有麻烦,参见手册,但是在手册的哪里,没有提。后来终于找到 (跟着某位大侠的贴子,他说,他就要放弃时找到了)了,说是第17 次版本更新的时候(?)数据库的语句写错了,应该把哪段以前的都删除就好了。

我登时傻眼了。怨不得有人说开源的维护成本高,这手册是给人类看的么。

又一顿折腾,我屈服了,安了mysql。

可能有的同学会问,你为什么不架jabberd14或jabberd2呢?因为我遇到了更大的麻烦。用ubuntu软件中心安装上以后,我参考了一下手册,我又傻眼了。手册上说,要先建 jabber 这个用户和组。

我知道,又有同学跳出来说了,这难么?

不难。问题是,此时处在"用ubuntu软件中心安装上以后"这个时间点,我发现jabber 这个用户和组已经建了。那应该是ubuntun软件中心的版本建的,那么,接下来手册里的步骤,哪些已经完成,哪些没有完成呢?

一步一步检查?我可能检查了20步,都完成了,一放松警惕,结果第21步软件中心没自动给建好。所以,在jabberd*两个版本上,我花了一个小时,两个小时(?),然后放弃了。

如果你小的时候,有大人一边给你喂药,一边说"不苦",结果你吃下去苦得直咧嘴;如果你修牙的时候,牙医说"不疼",结果整得你一身汗;如果你的高中老师告诉你上了大学就好啦……以后你都不要相信他哪怕一句话。

总之吧,后来我使用mysql,安装mysql-server, mysql-client, jdbc。然后jabber服务器openfire就跑起来了。

剩下的,还需要数据库的一些设置,登录口令和主机啦啥的,你如果会也不用我罗嗦,你如果不会,我这一篇也写不下,如果只列上我的步骤,哪怕一小步你的机器跟我的不一样,还特别把你引入歧途。所以,略。

对了,得跑下面这条语句:> cat openfire_mysql.sql | mysql openfire -u root -p

openfire_mysql.sql这个东西,在我机器里是在[/usr/share/openfire/resources/database]下面。

参见[http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/database.html]。

4. 客户端连接

* with emacs-jabberlocalhost:5222 ssl

* jabber客户端 gajim

用户名需要类似 young@young-laptop; localhost:5222

5. 外网连接

这个时候,内网就可以用了。如果你在防火墙 (或者NAT,或者无线路由)的里面,而你需要外网用户连进来,需要查到你的外网IP。

可以这么查,用浏览器访问[http://www.showmyip.com/]。

然后你需要设置防火墙 (或者NAT,或者无线路由),让从外网能够访问你的防火墙某个端口,相当于对应访问内网你的jabber server的IP及端口。为啥说这么麻烦呢,因为不同的防火墙在这时使用的名字不一样。比如我的,在"转发规则->虚拟服务器"里设置。为了对用户友好,开发商起了这些"友好"的名字,结果连专业人员也不知道那是什么了。用户?当然也不知道。

以上设置完成以后,你可以告诉你要聊天的对象,让他把jabber客户端的服务器设置为你的外网IP,还有端口……

然后,你们就可以聊了。

6. 其他

我禁用了注册用户的功能,凡是要用的,手动添加。文字聊天,传文件,都行。语音没试,我嗓子基本还是不能发声,所以没啥意义。

还有,各种客户端里,还就是pc版的gtalk不行,它不能更改服务器的地址,只能连到google。

--------------------

有的同学可能会问,你为啥不用QQ呢?

其一,2007年12月,我在博客里提到 我永不使用QQ,"永"对现在而言,仍然是有效的。

其二,QQ是某个公司开发的产品,使用者没法选择这一服务而拒绝产品。如果你使用电子邮件这一服务,有很多产品可以用。对网络中心提供的不爽,你还可以用google的,对google不爽,你还可以用163的。你对QQ提供的不爽呢?

其三,QQ的一些模式真的令我非常不爽,不仅2007年底事件,还经常让我想起许多敏感词。

比如吧,比如,我发放课件的时候,会向同学的信箱发送,而不是要求同学到我的博客或网站下载,原因非常简单,要求别人如何如何,是一种*侵入式*的合作方式。

如果老板要求下属必须使用某款手机,不能要求下属去买一个,而只能为下属备好免费的,还要问下属乐不乐意非工作时间带在身上,要不要公司为带这么沉个东西付补偿款。老板不能因为员工也可以用这手机聊聊私喀,就理所当然地认为有权利要求下属了。

这让我想起李记者讲过的例子:为了避免侵版被告,公司老板要求员工自备操作系统和所有开发工具。你怎么不要求产业工人自备车床呢。

所以,各种旧的和新的原因吧,我仍然不使用QQ。很多同学问过我这个问题了,你一个IT男为啥没有QQ呢。2007年12月那篇博客,我是这样写的:

我将永不使用QQ。 我的MSN和邮箱:young@nenu.edu.cn。 对给您带来的不便深感抱歉。 添麻烦了。 有不少朋友问到原因。如果你不知道,麻烦google: QQ soff 查对方IP可以使用netstat或其他QQ版本。以此纪念soff君。不认识soff,也基本没用过他的作品,也不关心审判结果。弃用是因为感情上不再能接受QQ,不是技术原因。 转个故事,说明一下原因。

古时候,阿跋斯哈里发王朝的第四代哈里发叫阿尔・马蒙。他有匹千里马。一次,一个叫奥玛的商人路过巴格达,他看到阿尔・马蒙的马,羡慕不已,提出用十个金币来换,但阿尔・马蒙说就是给一百个金币,他也不换。奥玛恼羞成怒,决定用诡计把千里马骗到手。


奥玛打探到阿尔・马蒙每天独自溜马的路线,选择了一个离城门最远,人迹罕至的地方,乔装成病重的流浪汉,躺在路边。果然,善良的阿尔・马蒙看到有人病倒路边,赶紧把他扶上千里马,打算带他进城治病。奥玛装作有气无力的样子指了指地上的包袱,阿尔・马蒙把他的包袱拾起来,系在马背上。奥玛又指了指远处的木棒,阿尔・马蒙以为这是流浪汉的木棒,忙转身去捡。奥玛趁机夺过缰绳,纵马逃走。


阿尔・马蒙追在后面追了很久,终于跑不动了。奥玛知道奸计得逞,便想奚落奚落阿尔・马蒙。他勒住马,得意洋洋对阿尔・马蒙说:"你丢了千里马,连一个铜子也没有得到,都是因为太慈悲了。你还有什么好说的?"


"马可以归你,但我有个要求," 阿尔・马蒙大声说,"别告诉别人你骗走千里马的方法。"


奥玛哈哈大笑说:"原来哈里发也怕别人嘲笑!"


"不,"阿尔・马蒙喘着粗气说,"我是担心人们听说这个骗局后,会怀疑昏倒在路边的都是骗子、强盗。说不定哪一天你我也会染疾,倒卧路边,那时谁来帮助我们呢?"

后来,两年前吧,与包师弟聊天QQ和gmail等事情。对话基本是这样的:


你不用QQ,如果哪天gtalk也封了呢?


那我们就用gmail,然后电话或短信通知邮件发了吧。


如果gmail也封了呢?


对话围绕着,如果A不能用了,那么用B吧,如果B也不能用了,那么用C吧……如果Z也不能用了,我们要不要用QQ呢?


一个人,你可以杀死他,但是,也不能令他屈从。屈从,以及生命,不能共存于一个人的身体中。


好在,除了QQ,我们不是还有别的么,比如 jabber server。

--------------------博客会手工同步到以下地址:

[http://giftdotyoung.blogspot.com]


[http://blog.csdn.net/younggift]


[http://www.renren.com/268966623/profile#pblog]

分享到:
评论

相关推荐

    vb.net Gtalk机器人

    2. **GTalk API**:虽然Google已经停止了对GTalk的官方支持,但仍有第三方库如SharpXMPP、XmppClient等可以帮助开发者连接到GTalk服务器并进行通信。这些库封装了底层的XMPP协议细节,提供易于使用的API来创建和管理...

    Google服务框架(含电子市场、Gtalk、通讯录和google日历同步)

    Google服务框架是Android系统中不可或缺的一部分,它为各种Google应用程序和服务提供支持,包括电子市场(Google Play Store)、Gtalk(现已更名为Google Hangouts)、通讯录(Google Contacts)以及Google日历同步...

    gtalk-robot:gtalk 机器人

    总之,gtalk-robot项目展示了如何利用Python和XMPP协议构建一个功能丰富的GTalk机器人,为用户提供自动化交互和各种服务。尽管GTalk本身已经退役,但其背后的原理和开发经验仍可应用于其他即时通讯平台和类似项目。

    IOS源码之iChabber-Simple gtalk and jabber client for the iphone

    本篇文章将围绕标题所提及的开源项目“iChabber”进行详尽的解析,它是一个专为iPod Touch和iPhone设计的简单GTalk和Jabber聊天客户端。通过学习这个项目,开发者可以了解到如何在iOS平台上实现即时通讯功能,特别是...

    基于openfire服务器的的IM系统源程序

    【标题解析】 "基于openfire服务器的IM系统源程序...综上所述,这个项目是一个完整的IM系统实现,通过Qt和QXMPP实现了客户端,利用openfire服务器处理通信,为开发者提供了深入理解XMPP协议和即时通讯系统开发的机会。

    XMPP协议学习资料

    为了实现在Android客户端与服务器之间的持久连接,以实现服务器向客户端的推送通知,AndroidPN(Android Push Notification)是一个值得提及的开源项目。AndroidPN集成了Asmack,以处理与XMPP服务器的连接和通信。...

    openfire消息机制和源码分析

    1. XMPP协议是一个基于XML的即时消息传递协议,它支持多种即时通信软件,其中Gtalk是基于XMPP协议的一个著名实现。XMPP协议的开放性意味着任何人都可以基于该协议开发自己的即时通信应用。 2. Openfire作为一个XMPP...

    XMPP 协议讲解 openfire 结构分析以及插件开发指南

    在XMPP协议的生态中,Smack库是一个关键组件,它为XMPP协议在Java语言中的实现提供了基础,使得开发者可以利用Java开发客户端或服务器端的应用程序。Smack不仅提供了丰富的API,还允许开发者通过定制XML消息格式来...

    WebIM(Openfire+Spark+Smack)

    该方案由三个主要组件构成:Openfire作为服务器端,Spark作为客户端,而Smack则负责实现XMPP(Extensible Messaging and Presence Protocol)协议。 XMPP是一种基于XML的消息传递协议,它允许发送和接收复杂的数据...

    qGTalk:使用Qt4和libglooxLinux版GTalk客户端。-开源

    《qGTalk:基于Qt4和libgloox的Linux版GTalk客户端解析》 qGTalk是一款由Qt4框架和libgloox库构建的开源Google Talk客户端,专为Linux用户设计。作为Google Talk服务的替代品,qGTalk在Linux平台上提供了与Windows...

    xmpp——Smack的IM实现

    通过学习和理解Smack库,开发者不仅可以创建自己的XMPP客户端,还可以在后端服务、移动应用甚至物联网设备中集成即时通讯功能。 在本文档的"trunk"子文件中,可能包含了Smack库的源代码、示例项目或者相关的文档...

    本人整理的android开发文档 第9章 P2P

    最初,Android SDK包含了一个由GTalk支持的即时消息服务,提供了即时消息框架的访问,包括发送和接收文本消息、设置用户状态(上线/离线)以及检查联系人在线状态等功能。然而,出于安全考虑,IM API在某个阶段被...

    tigase-web-chat

    【Tigase Web Chat】是基于Tigase服务器的一个实时通信解决方案,专为构建Web端的聊天和协作应用而设计。Tigase是一款开源、跨平台的XMPP(Extensible Messaging and Presence Protocol)服务器,支持多种协议,如...

    smack4.1.x的完整依赖包

    Openfire 是一个基于 XMPP 的实时协作服务器,支持多种协议,如 Jabber、GTalk 和其他兼容服务。 **Smack 4.1.x 的核心组件** 1. **Smack API**: 这是 Smack 的核心组件,提供了基本的连接管理、会话创建、消息...

    openfire综合介绍.doc

    总的来说,Openfire是一个强大的、基于XMPP的开源即时通讯服务器,它结合了Spark和Smack,利用Apache MINA框架实现高效网络通信,同时提供丰富的插件机制以适应各种应用场景的需求。无论是企业内部沟通、在线游戏...

    基于xmpp协议的多端即时通讯方案

    ##### 3、为什么选择XMPP协议 当前市场上虽然存在多种即时通信软件,但由于缺乏统一标准,导致各个软件之间无法实现互联互通。XMPP协议(Extensible Message and Presence Protocol)的出现解决了这一问题,使得...

    目前最详尽的openfire介绍

    - **Openfire**:作为服务器端,它是基于XMPP协议的即时通信核心,尽管支持点对点通信,但在获取连接信息和通信状态时,仍需依赖服务器。Openfire同样支持插件扩展,对于功能的定制化推荐使用插件方式,避免对源代码...

    openfire处理消息流程及openfire详细信息

    企业利用XMPP协议开发适合自己需求的IM应用,不仅能提升内部沟通效率,还能根据特定场景(如网络游戏)开发更为丰富的功能,如实时场景提醒、团队语音交流等,进一步拓展了IM应用的边界。 #### Spark、Smack与...

Global site tag (gtag.js) - Google Analytics