关于即时通讯的胡思乱想
XMPP的数据采用XML传输,这是一个容易滥用、塞进过多特性的格式。看《XMPP》一书,好歹啃下来了。
不过找C++的XMPP库的时候,总觉得没个顺心的。最完善的也许是gloox,号称文档完善。但是文档,也就是个class and function reference,没有阅读入口,还不如直接看代码。后来看到代码包里有十几个example,继续尝试阅读。
找库的时候不时在动摇是否要死磕XMPP协议,它真的是最优选择吗?我想过google wave,其他协议,还有自己新写一个协议。
后来发现,google wave的服务器间协议其实是通过XMPP传输的。这符合我的想法之一:基于XMPP,开发一个独立于其他XMPP环境的协议。但是google wave我现在看来他们的进度不行,已经发布这么久了,client-server协议还没定制出来,用户只能用浏览器进行交互。浏览器的通知机制还没完善到能取代桌面软件的地步。
那么我是否自己创一个通讯协议?我还没有那个自信,主要是一人的精力很难做到服务端、客户端的实现,并且还要推广得开。不过也不是不可能,在我摸熟了XMPP,并且发现核心问题之后,可能再自己开发一个。
至于其他协议,我刚在搜索。这个协议要比XMPP好的话,需要有跟google talk同样基本的服务器实现。
在考虑XMPP协议的同时,我也在考虑所谓C/S模式和B/S模式的问题。B/S模式因为出现得晚一点,容易有错觉它先进一点。其实B(浏览器)就是一个C(客户端),不过B更单一一点,更臃肿一点,但相对的,S端写的代码可以更有普遍性,因为浏览器这个客户端内置了大量的API。如前所说,我并不认为浏览器可以完全替代客户端,软件全web化是过激了。我就更喜欢把聊天工具缩小到托盘图标区,而不是作为一个浏览器标签。也许以后浏览器会跟操作系统有更多的交互,但是现在还没看到哪个浏览器做这方面的努力。(例外:chrome尝试用自身替代整个桌面环境)。
要死磕哪个,我还没有定论。
《XMPP》读后感
我还在摸索怎么做一个比QQ好的聊天工具。于是看了《XMPP》这本书。简单评价下这本书:这是目前唯一能找到的XMPP入门书。书里面介绍了XMPP的工作原理,协议的一些示范,和一些应用实例。看完这本书之后对XMPP的优缺点有一个初步了解。
优点
如我之前的猜测,XMPP确实是用类似Email的架构方式。这是一种比较理想的开放架构。

XMPP是一个开放,分散式的即使通讯协议。因为是开放的,所以用户可以自行选择信任的注册商,就好像Email一样。又或者可以自行搭建。说白了就是一个即时的Email。
XMPP的核心部分比较精简,但可以扩展。它的标准发布页上面列举了一大堆已经审核过的扩展协议,比如群聊、数据表单等。通过集成的方式,可以满足大部分可知的需求。
XMPP有很多现成的服务端、客户端、代码库,所以要为自己的应用订做一套通讯软件的时候,可以使用现成的工具。
优点不继续说了,我觉得缺点更关键一点。
缺点
1、对二进制文件的支持
XMPP出发点是为了发送小段的XML数据,核心中缺乏对二进制的支持。也许社区认为发送二进制数据可以通过扩展协议实现,但是这样会有一个实现不一的问题(留到2说)。对于小段的二进制文件,也可以将它编码为base64然后嵌入XML中发送,但是这个大小限制实在是很郁闷:通常是8K。update:一说是64K,但通常是服务商自己定的。
二进制支持的缺乏限制了QQ用户很习以为常的一种交流方式,那就是大量的自定义表情和截图。XMPP应该把附件放进core。
2、开放的弊端
XMPP是开放的,但是却带来了不少麻烦,而可扩展性带来的麻烦就更大了。注意,各个XMPP服务器(比如google gtalk)是可以选择性实现XMPP协议中的哪个部分的。通常会覆盖实现core的所有内容,但是扩展部分就不一定了。最明显的是,gtalk服务器没有实现扩展协议中很有用的muc(多用户聊天/群聊)。这意味着如果要用gtalk账号建一个群的话还要找另一个支持muc的服务器,不说普通用户,我都觉得这样很不爽。
除了服务器的不一致,还有客户端的不一致。各种客户端也是选择性的实现XMPP协议中规划的功能。也还是gtalk,因为它原生不支持群聊,聊天的各方并不确保对方的客户端是否能处理muc服务器发去的群聊信息。
我觉得XMPP的开放性,会演变成一种各自实现,各自为政的状态。而维持这些小团体的只有XMPP的core部分,即基本的文本消息和状态。
3、应对
XMPP出现的问题也许是任何一个开放可扩展协议都会遇到的,所以另外创一个开放协议并不解决问题,而且很难达到XMPP现在的普及度(目前有gtalk和facebook chat两家巨头使用了XMPP)。但问题并不是太糟,我接下来要研究一下怎么处理之前两个问题。
比如可以实现局部的封闭。想像只有一个服务器,通信的对象也是同一个客户端。这样会产生一些互通性问题,但我觉得这时候只有先把目光定在前方了——发送对方不能处理的数据时,己方客户端警告;对方收到不能处理的数据时,自行考虑是否要换客户端
多少体会到为啥google会有个wave出来。
辞旧迎新,年终总结
元旦的时候并没有写总结日志,因为意识里还是觉得春节才是过年。
以下是回顾
1、陷入垃圾项目
要从更早时候说起,08年12月我被忽悠进了一个“项目组”,做所谓的“项目”。该项目的细节还不想多提,简单的说就是写一个没技术含量,骗钱的小软件。虽说没有技术含量,但是我的09年全年陷入了巨大的压力之中,压力有外部也有内部。我思维上有种洁癖,不喜欢牵扯一些琐碎的事情,所以了解到这个项目的技术含量之低之后,就一直想早点脱离这个泥潭。我最终陷入这个沼泽一年之久。
终于,10年的1月上旬,某个契机下我决定向“老师”翻脸,脱离这个项目组。某人脸很黑,但她拿我没办法,尤其是我说出“我不需要钱”的时候。当时的心情我曾经写过一篇日志。那天之后,我再次回到自由身,并且深深认识到,不能乱接项目。
2、一年RoR编程
塞翁失马,我从那个垃圾项目里倒也有一点收获,那就是接触到了RoR编程。RoR是一个全栈式的Web开放框架,在这个框架的设计上我接触到很多先进的设计,比如:测试驱动开发,约定优于配置,MVC架构,AJAX,RESTful……
我喜欢上了RoR编程的快捷,所以我09年里都在写RoR的代码。我用清明节的3天写了现在这个blog的骨架,之后逐渐完善,就一直使用至今。后来因为Chloe公房需要一个网站,我又萌生自己写一个音乐视频类站的想法,于是有了chloe.chloerei.com,也是逐步完善中。
这两个网站并没有什么杀手级功能,但是开发过程我学到了很多东西,搭建服务器的过程也搞懂了域名,VPS,网页服务器配置等等一套流程。并且我越发的对信息的流动产生兴趣,未来的一段时间我都会考虑这个问题。
3、任FS超级版主
我还记得我是09年3.14号(白色情人节)做上电脑版版主的。下学期忘了什么时候,FS的管理层人员出现了一些真空,然后管理员守望把我提拔上了超版的位置。
超版的职责跟版主不一样,版主的时候只要关注自己的版区,维护版块讨论的氛围就行。而超版很多时候要关注整个论坛的宣传,发展。比如我参与了FS 7周年晚会的宣传、组织工作。然后一些工作,让我和几个版主都发出“原来版主还要做这种工作?!”的感叹,比如:到楼顶拉宣传横幅,搬运舞台板,拉舞台背景,找各个部门老师签字……我也有机会接触了一些作为宅男不会接触的人,比如司仪队的帅哥美女、舞台工作队、舞协、吉他社、书法协会,守望笑称“宅男改造计划”。晚会是一个大型活动,并不是一个人单枪匹马能完成的,所以有些时候,我简直愣住了,但是其他版主的身影让我想起我不是一个人在战斗,感谢各个版主,特别是十四和饼干。最后,参与晚会的版主们和部分观众玩得很high :)
4、网络监管越来越严,FS再次假期关闭
也许把FS的关闭放在国家大环境来说,总显得在推卸责任,但我是没办法。我太嫩了,对于上面那些人,我不喜欢政治,处理这些问题,除了想套那些人麻包袋打他们一顿,我没有别的法子。但是我不能,所以我什么都做不了,我们手上没有牌。
现在版主群基本都是“等待严冬过去”的心态,而坛友们也不可避免有“管理层不作为”的想法,我还,找不到办法。
5、告白
杯具了
以下是展望
6、亲友
祝我爸爸妈妈大姐姐夫亲朋好友身体健康万事如意~
7、自己
互联网是个无边无际,充满生命力和想像力的大陆。新的一年我会继续在这片大陆上探索、耕耘。
以上,撒花~~

