目前每个大的互联网企业都有自己的IM产品,但是这些产品都是各自为政,相互间不能通讯。那能否做到IM之间相互通讯呢?我先从技术实现上分析吧:
我们先假设如下场景:IM A属于互联网公司a.com,IM B属于互联网公司b.com。我们来看看user@a.com和user@b.com通讯会遇到哪些问题。
首先在好友关系上,通常的IM做法是需要聊天的两个用户建立双向的好友关系。但是如果两个用户的帐号是属于两个公司的话,这个就不好办了,因为每个公司都有清理沉默帐号的规则,比如A公司清理了一些帐号,肯定不愿意告诉B公司清理了哪些帐号。解决这个问题的方法就是使用非对称的好友关系,也就是单向的好友关系。类似邮箱里面的通讯录,只要只用对方的用户名就可以给对方发消息。
其次是服务器之间信任问题。比如a.com的服务器向b.com的服务器发送了一条IM消息,那如何判断这条消息不是假冒的呢?这个也很简单,我只要知道a.com的所有服务器的ip就可以了,检查发送方的ip就可以知道是否是别的服务器冒充的了。那如何知道a.com的所有服务器的ip呢,这个也很简单,只要在对应的域名上加一条text记录。text记录里面包含服务器列表就可以了。
对于如何传递消息,如何发送状态通知等等,这些都不是技术难点,只要能协商出一个技术方案就ok。
这个在技术实现上没什么特别的难度,那为什么说是纸上谈兵呢?主要是这个没人推动。在一个理想的情况下,比如几大互联网公司都有IM互通的意愿,大家都出资成立一个合资公司。这个合资公司的职责就是定制一套通讯规范,并实现一个简单的IM框架(client和server)并开源。这个框架只需要能支持几百个用户就ok了,不需要太复杂和功能强大。利用这个IM框架的话,个人或小公司都能做出自己的IM就可以了。
在目前IM市场qq一家独大的情况下,其他互联网公司做这样的事情应该还是有好处的。IM在技术上并不是很复杂的东西,需要投入的资源不是非常之大。
本来有设计一套通讯协议的,但是觉得没什么意义,所以就没加到文章里来了。