关于下一代IM服务器的一点想法
當(dāng)前IM的站場上依舊硝煙彌漫,QQ, MSN, Google Talk, ICQ, Yahoo!還都在爭奪著市場的份額。今天我所要說的,是跳出商業(yè)利益趨勢之短利,而從長遠(yuǎn)的角度考慮IM的發(fā)展趨勢。
目前各大IM各自為政,在互相學(xué)習(xí)中提供著越來越豐富的功能。在他們瘋狂的瓜分著internet用戶市場的時(shí)候,我們普通的用戶成了他們商業(yè)競爭的受害 人。恕不見,因?yàn)樽约旱呐笥延兄煌腎M,為了與他們通訊,我們只好自己申請成為那個IM的用戶。結(jié)果,每個人一開機(jī),就有著少則3-4個IM同時(shí)叮叮 咚咚的啟動,多則6-7個。
雖然也有著多合一的IM客戶端,但是一來有些功能由于這種整合客戶端所限,我們無法使用;二來,我們依舊需要管理著越來越多的帳戶和密碼。不少人因?yàn)榉笐?#xff0c;而多個帳戶使用一個密碼,結(jié)果導(dǎo)致一個密碼被人知道后,其他的密碼也被人家猜到了,而使信息泄密。
如何讓用戶面對一個簡單的界面,用最少的用戶名密碼對完成所必須的IM通訊呢?
現(xiàn)今的世界,唯有開放,方能生存。
我的想法是各個IM服務(wù)器之間互連,不要再那么封閉了。IM服務(wù)器遵循某種標(biāo)準(zhǔn)的IM通訊協(xié)議,然后就像email服務(wù)器那樣,雖然IM服務(wù)器不同,IM的服務(wù)不同,但是他們之間可以共享最基本的消息通訊。
這樣QQ的用戶可以添加MSN的好友,并且可以與MSN的好友交流,而不必非注冊一個MSN帳戶。各個IM服務(wù)提供商,由IM孤島,變成了IM接入點(diǎn),所 有的IM孤島互聯(lián),組成一個IM的服務(wù)器網(wǎng)絡(luò),或者世界。成為任何一個IM的用戶,都可以與這個IM世界里的任何服務(wù)器的任何用戶交流,而無須非在對方的 IM服務(wù)器上注冊用戶。
其實(shí)這種思想在Email身上有很好的體現(xiàn)。雖然大家的email服務(wù)器不同,注冊的服務(wù)不同。但是我們依舊可以和不同的email服務(wù)器上用戶通訊,而不必非得在對方的email服務(wù)器上注冊一個用戶。
如果從email的視角看今天的IM的話,那么稱今天的IM為IM孤島(IM Island),一點(diǎn)都不為過。未來是互聯(lián)而開放的世界,任何孤島都會被打破,互聯(lián)是一種必然的趨勢。
其實(shí)抽象一下IM,雖然IM的功能五花八門,但是我們90%以上的時(shí)間就是在使用下面這幾個公共的特性:
- 文字消息交流 (包括表情和圖片)
- 語音、視頻交流
- 群(組)交流
- 好友管理(包括好友組管理,好友的添加刪除,以及好友信息或者blog頁面)
- 游戲娛樂平臺
- email提醒
- 各種消息
以這個通用的協(xié)議為基礎(chǔ),所有加入IM World的IM服務(wù)器,必須遵守這個通用IM協(xié)議,并采用這個協(xié)議互相通訊。就可以完成IM世界里面基本交流無障礙。當(dāng)然,IM服務(wù)商,會除這個通用協(xié) 議中要求的這些特性外,提供更多額外的服務(wù)給用戶,以吸引用戶使用自己的IM作為IM World的接入點(diǎn)。
互聯(lián)導(dǎo)致IM用戶群的整合,對于任何的IM服務(wù)商,都是用戶群的擴(kuò)大,由于共同制定和完善通用IM標(biāo)準(zhǔn),也會使標(biāo)準(zhǔn)更加完善,通訊更穩(wěn)定。
這是考驗(yàn)一個公司和決策人氣魄和膽識的時(shí)候。不同的公司和決策人會作出不同的反應(yīng)。
到底是給自己的用戶加上沉重的枷鎖,關(guān)起門來不讓他們跑掉?還是擺出自信和開放的姿態(tài),敞開大門,歡迎其他的IM與自己的消息互通?
并不是所有的人都能夠真正的把目光放長遠(yuǎn),能夠作出開放的姿態(tài)的。但是,趨勢是一定的,已經(jīng)有一些小范圍的消息互通,但是還不足夠。讓我們拭目以待,看看誰是這個敢吃螃蟹的人,讓這個世界的IM成功的互聯(lián)起來。
我下面就說兩種互通的例子,第一個是一個開放的IM服務(wù)器和一個封閉的IM服務(wù)器,目前以QQ為例,通過QQ Bridge,或者叫做QQ網(wǎng)關(guān),進(jìn)行互通的例子。第二個,是讓IM服務(wù)器分布式,類似于email和dns那樣,im服務(wù)器同聯(lián)盟服務(wù)器通訊,使得不同 的IM用戶可以互相通訊。
2、可以添加QQ好友,并且可以與QQ好友通訊的IM服務(wù)器
2.1 背景
在這個圖中,800001 - 800002是QQ用戶,他們使用自己的計(jì)算機(jī),分別連接QQ不同的服務(wù)器。而Universal IM服務(wù)器則是另一個IM服務(wù)商,我們虛構(gòu)一個名字叫做Universal IM,簡稱(UIM)。屬于這個IM服務(wù)商的有biyao@guimenzong.com, luxueqi@dazhufeng.qingyunmen.com, zhangxiaofan@xiaozhufeng.qingyunmen.com這3個用戶。
QQ Bridge 服務(wù)器,實(shí)際上是一個虛擬的多個QQ客戶端的服務(wù)器,當(dāng)前他有兩個QQ帳戶,一個是900001,另一個是900002。
當(dāng)我們忽略掉QQ Bridge服務(wù)器的時(shí)候,這就是典型的兩個IM服務(wù)商,他們擁有自己的用戶群,而這些用戶群中的用戶不可以跨群訪問。也就是說800001永遠(yuǎn)無法和 luxueqi@dazhufeng.qingyunmen.com取得聯(lián)系,無論是加好友還是發(fā)消息都不行。
這就是我們目前大部分IM的現(xiàn)狀。
我的想法是,在UIM服務(wù)器和QQ服務(wù)器中間建立起一個橋梁。由于QQ的思想并不開放,所以,我們將這個QQ Bridge服務(wù)器放在靠近UIM的位置,并且將其視為UIM服務(wù)器的一個子模塊。當(dāng)然,如果QQ是開放的,那么這個QQ Bridge就要改名為QQ-UIM Gateway了,并且獨(dú)立出來,做QQ服務(wù)器和UIM服務(wù)器的消息路由。
暫且,我們先將其視為UIM的一個模塊(畢竟這符合QQ當(dāng)前的封閉策略)。
首先,UIM管理人員,申請若干個合法的QQ帳戶,在此例子中,是900001, 900002。
2.2 通訊過程
背景清楚后,通訊過程就比較好理解了。假設(shè)zhangxiaofan(張小凡)這個用戶有一個好友小白,那個好友的QQ號是800003。如果沒有QQ Bridge,那么張小凡就必須申請一個QQ號,然后在QQ中添加QQ好友800003,然后方可和小白通訊。
可是當(dāng)我們有QQ Bridge后,情況就發(fā)生了變化。
張小凡直接在自己UIM帳戶zhangxiaofan@xiaozhufeng.qingyunmen.com里面添加好友,指定好友IM為QQ,IM 號為800003。然后UIM服務(wù)器就把這個QQ好友添加到張小凡的UIM帳戶里了。
那么UIM服務(wù)器在后臺是如何做這個添加的呢?
首先,UIM服務(wù)器隨機(jī)的選擇一個實(shí)現(xiàn)申請好的QQ號,比如900001,然后QQ Bridge會通過900001,向QQ服務(wù)器申請將800003加為好友。由于在QQ服務(wù)器眼里,QQ Bridge實(shí)際上是一個QQ客戶端,所以,就按照正常手續(xù)征詢對方同意,當(dāng)對方同意后,這個好友就倍加到900001這個QQ的好友列表中了。
在UIM服務(wù)器中記載了,zhangxiaofan@xiaozhufeng.qingyunmen.com這個帳戶有一個QQ好友:800003,而QQ Bridge服務(wù)器記載了,他使用的是服務(wù)器QQ號900001來和800003進(jìn)行通訊。
- 遠(yuǎn)程好友: QQ:800003
- 本地QQ: 900001
- 本地帳戶: zhangxiaofan@xiaozhufeng.qingyunmen.com
下面張小凡要找小白聊天,于是他雙擊他好友列表中的小白這個好友,敲了一段文字"hello"。
這個hello會最先被送到UIM服務(wù)器,UIM服務(wù)器的dispatcher會發(fā)現(xiàn)這個消息不是本地的,而是QQ服務(wù)器的,于是轉(zhuǎn)發(fā)消息到QQ Bridge服務(wù)器,QQ Bridge服務(wù)器一看,目的地是QQ:800003,而源是zhangxiaofan@xiaozhufeng.qingyunmen.com,于是, QQ Bridge就用QQ:900001這個帳戶向800003這個帳戶發(fā)送消息。
對于800003而言,他只是看到自己收到了一個從900001這個號碼發(fā)來的消息,而意識不到,這個實(shí)際上是一個UIM服務(wù)器的帳戶。
小白回消息,"I got it"。這個消息會先發(fā)送到QQ服務(wù)器,QQ一看目的地是900001,于是消息就被分發(fā)到900001身上,QQ Bridge就收到了這條回復(fù)。然后對比本地表后發(fā)現(xiàn),遠(yuǎn)程好友是:QQ:800003的,本地QQ是900001的,應(yīng)該發(fā)送給張小凡。于是QQ Bridge和UIM服務(wù)器聯(lián)系,UIM服務(wù)器將這個消息傳遞到張小凡的計(jì)算機(jī)上。
通過這個描述,大家可能會發(fā)現(xiàn),QQ Bridget非常像網(wǎng)絡(luò)中的NAT,網(wǎng)絡(luò)地址轉(zhuǎn)換。而這里,實(shí)際上是IM協(xié)議轉(zhuǎn)換,非常類似的機(jī)制。
通過這種形式,QQ用戶和UIM用戶可以無縫銜接,他們之間的通訊是透明的,他們意識不到,特別是QQ的用戶,自己通訊的對方是另一種協(xié)議。
2.3 缺陷
這是一個類NAT的東西,也就面臨和NAT一樣的問題,就是QQ的好友無法添加UIM的好友,除非做靜態(tài)映射。也就是說,添加好友的行為,一定是UIM用戶添加QQ用戶,而無法是QQ用戶添加UIM用戶。這個其實(shí)也是由于QQ不開放的原因。
靜態(tài)映射可以這樣完成。比如張小凡之前曾經(jīng)有一個QQ號800004,現(xiàn)在他遷移到UIM服務(wù)器了,他可以在UIM服務(wù)器上注冊自己的QQ帳戶。這樣,所 有800004的好友,自動的加入他UIM的好友。以后,凡是張小凡向QQ好友發(fā)消息,那么本地QQ號就不再是原來的900001了,而是張小凡注冊的 QQ帳戶800004。因此,任何想添加張小凡QQ的人,只要添加800004,那么就自然會出現(xiàn)在張小凡的UIM好友列表里。
通過注冊自己已有的QQ號來綁定UIM帳號。即方便了遷移,也方便了QQ添加遷移到UIM用戶為好友。
3 UIM服務(wù)器聯(lián)盟
UIM是單一的服務(wù)器么?就像QQ, MSN, Google Talk那樣由一個大公司來運(yùn)作,集中管理?
我們可以這樣子,其實(shí)也可以分布式。就像email服務(wù)器那樣。下面我就舉一個分布式的例子。
3.1 各自為政
假設(shè)UIM服務(wù)器是可以免費(fèi)下載的,任何人如果愿意都可以架設(shè)UIM服務(wù)器,而且由于UIM之間的協(xié)議是標(biāo)準(zhǔn)化的,任何人也可以實(shí)現(xiàn)自己的兼容UIM服務(wù)器。
那么現(xiàn)在,鬼王宗、青云門的大竹峰和小竹峰都建立了自己的IM服務(wù)器方便自己的門人通訊。就如下圖所示。
鬼王宗的服務(wù)器是: uim.guiwangzong.com
大竹峰:uim.dazhufeng.qingyunmen.com
小竹峰:uim.xiaozhufeng.qingyunmen.com
在小竹峰下有幾個用戶,其中兩個,一個是田靈兒(tianlinger),另一個是張小凡(zhangxiaofan)。
如果張小凡想和田靈兒通訊,很簡單,就和今天的QQ一樣。由于他們都連入了同一個服務(wù)器,通過服務(wù)器就可以互相通訊了(綠線),甚至可以直接點(diǎn)對點(diǎn)通訊(黃線)。
3.2 結(jié)盟
在初期,各自為政似乎還基本滿足。但隨著日子的發(fā)展,張小凡通過七脈會武結(jié)識了陸雪琪師姐。可是小凡沒有大竹峰的帳戶,小凡始終無法與陸雪琪取得聯(lián)系。
雖然他們都有自己的IM帳戶,但是由于大竹峰和小竹峰的服務(wù)器并不交換信息,所以除非張小凡跑到大竹峰去,否則無法和陸雪琪交流。
這種需求不是個例,而是具有普遍性的。田靈兒也還想著和龍首峰的齊昊師兄談天說地呢。共同的利益,促使了結(jié)盟的出現(xiàn)。
如下圖所示:
于是有一個叫做Universal IM Union(宇宙IM聯(lián)盟)出現(xiàn)了。凡是符合UIM服務(wù)器間協(xié)議標(biāo)準(zhǔn)的服務(wù)器都可以加入聯(lián)盟。而聯(lián)盟有一個union.uim.com的服務(wù)器,負(fù)責(zé)管理注冊、注銷和查詢UIM服務(wù)器。
現(xiàn)在大竹峰和小竹峰的服務(wù)器都加入了這個宇宙IM聯(lián)盟。
這樣當(dāng)大竹峰的服務(wù)器需要轉(zhuǎn)發(fā)消息到小竹峰的時(shí)候,他可以查詢union.uim.com,從而得知小竹峰的服務(wù)器的位置,反之亦然。服務(wù)器互相之間可達(dá)了,那么剩下的就是按照標(biāo)準(zhǔn)通訊協(xié)議交換消息了。
3.3 通訊
這回張小凡想和同樣加入了宇宙IM聯(lián)盟的鬼王宗服務(wù)器用戶碧遙聯(lián)系,他會發(fā)送消息到biyao@guiwangzong.com。
如下圖所示:
小竹峰的服務(wù)器一看消息目的地,發(fā)現(xiàn)是guiwangzong.com,而不是本地。于是小竹峰的服務(wù)器就到union.uim.com上查詢,鬼王宗的服務(wù)器在哪里。
union查詢后,告訴小竹峰的服務(wù)器,鬼王宗的服務(wù)器在uim.guiwangzong.com。
然后小竹峰的服務(wù)器就將張小凡的消息,直接發(fā)給uim.guiwangzong.com。
鬼王宗的服務(wù)器收到后,一對比,發(fā)現(xiàn)目的地是本地帳戶碧遙的,于是就將這個信息轉(zhuǎn)發(fā)到碧遙的計(jì)算機(jī)上。
碧遙回復(fù)消息也是同樣的一個流程。
大家可以注意到,其實(shí)union.uim.com實(shí)際上是一個dynamic dns。聯(lián)盟之負(fù)責(zé)記錄各個im服務(wù)器的域和服務(wù)器的地址。而不負(fù)責(zé)轉(zhuǎn)發(fā)消息。所有的消息交換是由各個UIM服務(wù)器之間完成的,聯(lián)盟服務(wù)器不參與信息交換,僅僅起到一個目錄查詢的作用。
其中可以優(yōu)化的是,如果所有UIM服務(wù)器遵循同樣的標(biāo)準(zhǔn)的話,那么張小凡在第一個消息后,就可以從小竹峰的服務(wù)器上得知鬼王宗服務(wù)器的地址,甚至碧遙計(jì)算 機(jī)的地址,于是直接向鬼王宗服務(wù)器或者碧遙的計(jì)算機(jī)發(fā)送消息,和當(dāng)前的IM點(diǎn)對點(diǎn)交流是一樣的。避免了中間的流程,降低了延時(shí)。
?
4、尾聲
感謝大家的提醒。沒想到我的這些想法剛好和Jabber的思路不謀而合,這著實(shí)讓我興奮了一會兒,仔細(xì)的閱讀了Jabber的簡單介紹后,有一種相見恨晚的感覺。
“Jabber是一個開放的、基于XML的協(xié)議。它的用途在即時(shí)通訊及表示信息方面。”
“Jabber的關(guān)鍵特色是,分布式的即時(shí)通訊系統(tǒng),以及使用XML串流。”
“Jabber網(wǎng)絡(luò)是基于服務(wù)器的(即客戶端之間彼此不直接交談),但是也是分布式的。不像AOL即時(shí)通或MSN Messenger等服務(wù),Jabber沒有中央官方服務(wù)器。”
“Jabber系統(tǒng)有一個獨(dú)特的網(wǎng)關(guān)(也稱作傳送器)功能,該功能允許用戶可以使用其他協(xié)議,如AOL、ICQ、MSN、Yahoo、短信或者電子郵件。和Trillian或Gaim等其他多協(xié)議客戶端不同的是,Jabber在服務(wù)器級別提供這個功能,任何Jabber用戶都可以注冊一個這樣的網(wǎng)關(guān)來登錄其他網(wǎng)絡(luò)。也就是說任何支持Jabber協(xié)議的客戶端都可以訪問一個存在的網(wǎng)關(guān),來與其他網(wǎng)絡(luò)上的用戶聯(lián)系。”
Jabber具有如下特點(diǎn):
開放— Jabber協(xié)定是自由、開放、公開的,并且易于了解。而且在客戶端、服務(wù)器、元件、源碼庫等方面,都已經(jīng)各自有多種實(shí)作。
標(biāo)準(zhǔn)— 因特網(wǎng)工程工作小組(IETF)已經(jīng)將Jabber的核心XML串流協(xié)定以XMPP之名,正式列為認(rèn)可的即時(shí)通訊及Presence技術(shù)。而XMPP的技術(shù)規(guī)格已被出版為RFC 3920及RFC 3921。
證實(shí)可用— 第一個Jabber技術(shù)是Jeremie Miller在1998年開發(fā)的,現(xiàn)在已經(jīng)相當(dāng)穩(wěn)定;數(shù)以百計(jì)的開發(fā)者為Jabber技術(shù)而努力。今日的因特網(wǎng)上有數(shù)以萬計(jì)的Jabber服務(wù)器運(yùn)作著,并有數(shù)以百萬計(jì)的人們使用Jabber即時(shí)傳訊軟件。
分布式— Jabber網(wǎng)絡(luò)的架構(gòu)和電子郵件十分相像;因此任何人都可以運(yùn)行自己的Jabber服務(wù)器,使個人及組織能夠掌控他們的即時(shí)傳訊體驗(yàn)。
安全— 任何Jabber服務(wù)器可以獨(dú)立于公眾Jabber網(wǎng)絡(luò)(例如在企業(yè)內(nèi)部網(wǎng)絡(luò)中),而使用SASL及TLS等技術(shù)的可靠安全性,已內(nèi)建于核心XMPP技術(shù)規(guī)格中。
可擴(kuò)展— XML命名空間的威力可使任何人在核心協(xié)定的基礎(chǔ)上建造客制化的功能;為了維持通透性,常見的擴(kuò)充套件由Jabber軟件基金會管理。
彈性佳— Jabber除了可用在即時(shí)通訊的應(yīng)用程序,還能用在網(wǎng)絡(luò)管理、內(nèi)容供稿、協(xié)同工具、檔案共享、游戲、遠(yuǎn)端系統(tǒng)監(jiān)控等。
多樣性— 用Jabber協(xié)定來建造及布署即時(shí)應(yīng)用程序及服務(wù)的公司及開放源碼計(jì)劃分布在各種領(lǐng)域;用Jabber技術(shù)開發(fā)軟件,資源及支援的來源是多樣的,使得使你不會陷于被“綁架”的困境。
-- 摘自《維基大百科全書:中文》
第一個案例和Jabber中的網(wǎng)關(guān)很相似,用以融合其他多種協(xié)議,不單單是其他IM協(xié)議,也可以是SMS或者Email。第二個案例則和Jabber整體的思想很接近,是基于服務(wù)器的IM,而不是基于集中管理的IM,這種非集中管理的方式,是認(rèn)證域最小化,有助于安全性的提升,另外也給服務(wù)器的區(qū)域組織提供了更好的靈活性。這也更證明了我的思路的方向是對的。開放、互聯(lián)是必然趨勢,分布式服務(wù)器機(jī)制更靈活的對IM網(wǎng)絡(luò)進(jìn)行組織,并且更好的提升了局部安全性,因?yàn)榭s小了信任域。
而此時(shí)另一個名字又出現(xiàn)在眼前 - Google。此前一直不理解為什么Google Talk采用Jabber協(xié)議,也沒有主動去了解Jabber協(xié)議具體內(nèi)容,僅當(dāng)其為一個普通的IM協(xié)議而已。而 如今,在了解了Jabber的思路后,再對我比前面的分布與互通的想法,再一次感嘆Google的大氣和眼光之長遠(yuǎn)。開放的、標(biāo)準(zhǔn)化的、分布式服務(wù)器的、基于XML的、 可以支持其它協(xié)議聯(lián)通能力的、具有良好擴(kuò)展能力的Jabber,確實(shí)是一個很好的選擇。雖然在今天Google Talk尚顯幼稚,但是從底層的Jabber已經(jīng)可以小窺其野心和它未來的良好的潛力。期待著未來有一日,Google能夠成功的推動各大IM的互聯(lián),結(jié)束當(dāng)今IM的信息孤島的局面。祝Google與Jabber越做越好。
推薦讀物:
維基大百科全書:
http://en.wikipedia.org/wiki/Jabber
http://en.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol
于XMPP通訊協(xié)議相關(guān)的RFC:
RFC 3920, Extensible Messaging and Presence Protocol (XMPP): Core
RFC 3921, Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence
RFC 3922, Mapping the Extensible Messaging and Presence Protocol (XMPP) to Common Presence and Instant Messaging (CPIM)
RFC 3923, End-to-End Signing and Object Encryption for the Extensible Messaging and Presence Protocol (XMPP)
Jabber 官方網(wǎng)站:
http://www.jabber.org/
http://www.jabber.org/jeps/
轉(zhuǎn)載于:https://www.cnblogs.com/dancefire/archive/2006/09/06/1985884.html
總結(jié)
以上是生活随笔為你收集整理的关于下一代IM服务器的一点想法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP登录后台
- 下一篇: 余额宝收益用计算机该怎么算,余额宝收益计