金氧

互联网中继聊天协议(IRC)

IRC是Internet Relay Chat的英文缩写,中文一般称为互联网中继聊天。它是由芬兰人Jarkko Oikarinen于1988年首创的一种网络聊天协议。经过十年的发展,目前世界上有超过60个国家提供了IRC的服务。在人气最旺的EFnet上,您可以看到上万的使用者在同一时间使用IRC。很多人称其为继bbs后的一种即时闲聊方式,相比于bbs来说,它有着更直观,友好的界面,在这里你可以畅所欲言、而且可以表现动作化,是故使众多的网虫们留连忘返。

相比于ICQ来说,它更具人性化,而且是即时式的聊天,更接近真实的聊天情景。下面看IRC的工作原理。 IRC的工作原理非常简单,您只要在自己的PC上运行客户端软件,然后通过因特网以IRC协议连接到一台IRC服务器上即可。它的特点是速度非常之快,聊天时几乎没有延迟的现象,并且只占用很小的带宽资源。所有用户可以在一个被称为“Channel(频道)”的地方就某一话题进行交谈或密谈。每个IRC的使用者都有一个Nickname(昵称),所有的沟通就在他们所在的Channel内以不同的Nickname进行交谈。

1. 中转

理解IRC原理的关键就是理解其"中转"功能。什么是中转呢?我们来做一个比较说明。假设,A与B要交谈。如果不采用中转,那么A直接建立一条到达B的通信隧道,二者通过这条通信隧道进行信息交流,信息流的方向为:A-B和B-A;如果采用中转,则需要有一个第三方来担任中转角色,设为C,A建立一条到达C的通信隧道,B也建立一条到达C的通信隧道,然后A与B通过C来间接进行通信,信息流的方向为:A-C-B和B-C-A。C就起着A与B间的中转站的作用。中转有什么优点呢?中转的最大优点是使“群聊”能够方便地进行。恰当地说,中转模式为信息广播提供了方便。我们来举例子。假设A,B和D三者要一起聊天。如果没有C的中转,那么A要将所说的每句话分别发给B和D;如果有C做中转,那么A将所说的话发给C,然后C将A的话分别发给B和D。可见,当没有中转时,每个参与聊天的计算机都要执行信息广播的任务,当存在中转时,信息广播的任务全由中转者来执行。中转站C的存在使得信息交流过程中的工作任务发生分离,可以把网络环境好、机器配置高的计算机作为中转站来提供服务功能。这就形成了IRC的服务器-客户端模型,聊天者作为客户端,连接到中转站服务器上。

2. 服务器网络

在上面的例子里,只有一个中转者C来承担服务。当聊天者数量很多时,会使C不堪重负。解决的办法是,使用多个服务器,服务器之间互相连接成网络,把聊天者分散到各个服务器上。服务器网络以树型结构互相连通。聊天者可以任选一个服务器连接。举例来说,在北京建立一个IRC服务器,称为BJ,在上海建立一个IRC服务器,称为SH,然后将BJ和SH连接起来,组成一个只有两个服务器的IRC网络。北京的用户连接到BJ上,上海的用户连接到SH上,这样北京的用户就可以与上海的用户聊天了。其他地区的用户可以根据地理位置的远近选择使用BJ或SH服务器。概括地说,聊天网络上的每个服务器都是一个中转站,当它从一个服务器或客户收到一条消息时,就将该消息转发给其它服务器,同时也根据具体情况,决定是否将消息转发给连接到自己的用户。

3. 频道

频道的本质是广播组。用户可以进入一个频道,也可以离开一个频道。当一个用户朝频道说话时,频道里的其他用户都能收到他的话(由服务器中转)。当第一个用户进入频道时,频道被创建,当最后一个用户离开频道时,频道被取消。因此,从用户的角度看,频道就是聊天室。下面说说频道之所以被称为“频道”的原因。如果一个聊天网络有多个服务器,频道要由服务器共同维护。举一个例子。有三个服务器,连接方式为A-B-C。在服务器A上,有第一个用户进入#IRC频道,这时,服务器A上即创建频道"#IRC",A将频道"IRC"的创建消息发给B和C。由于B和C上都没有用户位于#IRC频道,因此不执行任何操作。在这以后,服务器C上有一个用户进入#IRC频道,此时服务器C上也创建频道"#IRC",C将"#IRC"的创建消息发给A和B。之后,需要执行以下操作:B上建立频道"#IRC"并将A与C的"#IRC"频道连接起来,组成一个统一的#IRC。现在,虽然B上没有用户位于#IRC频道内,但是B上也开通了#IRC频道。可见,频道好像一条通信管道,将所有开通此频道的服务器贯穿起来,信息流在这个管道中流通。

4. 请求与应答

IRC上的信息交流采用请求与应答的模式。请求是由服务器或客户端发出的,其目的是请求(另)一个服务器执行某个操作或提供某些信息;应答是服务器对一个请求的回应信息。请求通常被称为命令;由于对每种应答都规定了一个三位数字做标识,应答也称为数字应答(numeric reply)。

转自:http://202.194.28.9:8002/jxzy/refs/htmlfiles/protocol/protocol00055.htm

« 即时消息协议预研 ActiveMQ JDBC 主从集群 »