即时通信原理

来源:互联网 发布:start here mac.app 编辑:程序博客网 时间:2024/05/16 11:17

一、IM即时通讯的原理和工作方式

典型的IM工作方式如下:登陆IM通讯中心(IM通讯服务器),获取一个自建立的历史的交流对象列表(好友列表),然后自身标志为在线状态,当好友列表中的某人在任何时候登录上线并试图通过你的计算机联系你 时,IM系统会发一个消息提醒你,然后你能与他建立一个聊天会话通道进行各种消息如键入文字、通过语音等的交流.

从技术上来说,IM的基本技术原理如下:

通过IM服务器登陆或注销
用户A通过列表找到B,用户B获得消息并与之交谈
通过IM服务器指引建立与B单独的通讯通道


第一步,用户A输入自己的用户名和密码登录IM服务器, 服务器通过读取用户数据库来验证用户身份,如果验证通过,登记用户A的IP地址、IM客户端软件的版本号及使用的TCP/UDP端口号,然后返回用户A登录成功的标志,此时用户A在IM系统中的状态为在线(Online Presence)。


第二步,根据用户A存储在IM服务器上的好友列表 (Buddy List),服务器将用户A在线的相关信息发送给也同时在线的IM好友的PC机,这些信息包括在线状态、IP地址、IM客户端使用的TCP端口 (Port)号等,IM好友的客户端收到此信息后将在予以提示。


第三步是IM服务器把用户A存储在服务器上的好友列表及 相关信息回送到他的客户端机,这些信息包括也在线状态、IP地址、IM客户端使用的TCP端口(Port)号等信息,用户A的IM客户端收到后将显示这些好友列表及其在线状态。


二、IM通讯方式

1.在线直接通讯 
如果用户A想与他的在线好友用户B聊天,他将直接通过服务器发送过来的用户B的IP地址、TCP端口号等信息,直接向用户B的PC机发出聊天信息,用户B 的IM客户端软件收到后显示在屏幕上,然后用户B再直接回复到用户A的PC机,这样双方的即时文字消息就不再IM服务器中转,而是直接通过网络进行点对点 的通讯,即对等通讯方式(Peer To Peer)。

2.在线代理通讯 
用户A与用户B的点对点通讯由于防火墙、网络速度等原因难以建立或者速度很慢,IM服务器将会主动提供消息中转服务,即用户A和用户B的即时消息全部先发 送到IM服务器,再由服务器转发给对方。

3.离线代理通讯 
用户A与用户B由于各种原因不能同时在线的时候,如此时A向B发送消息,IM服务器可以主动寄存A用户的消息,到B用户下一次登陆的时候,自动将消息转发 给B。

4.扩展方式通讯 
用户A可以通过IM服务器将信息以扩展的方式传递给B,如短信发送方式发送到B的手机,传真发送方式传递给B的电话机,以email的方式传递给B的电子邮箱等。


早期的IM系统,在IM客户端和IM服务器之间通讯采用UDP协议,UDP协议是不可靠的传输协议,而在IM客户端之间的直接通讯中,采用具备可靠传输能 力的TCP协议。随着用户需求和技术环境的发展,目前主流的IM系统倾向于在IM客户端之间、IM客户端和IM服务器之间都采用TCP协议。



即时通讯相对于其他通讯方式如电话、传真、email等的最大优势就是消息传达的即时性和精确性,只要消息传递双方均在网络上可以互通,使用即时通讯软件传递消息,传递延时仅为1秒种.


三、Leancloud三方库Chatkit

1.使用方法

为了让这个库更易入手,避免引入过多公开的类和概念,我们采用了类似「组件化」的方式进行构建,即将你在使用 ChatKit 库时所需要用到的所有方法都放在了 LCChatKit 这一个类中。它是一个 Mediator,是整个库的入口,也是中枢。

2.使用Chatkit的步骤:

  1. 在 -[AppDelegate application:didFinishLaunchingWithOptions:] 中调用 -[LCChatKit setAppId:appKey:] 来开启 LeanCloud 服务。
  2. 调用 -[LCChatKit sharedInstance] 来初始化一个单例对象。
  3. 调用 -[[LCChatKit sharedInstance] openWithClientId:callback:] 开启 LeanCloud 的 IM 服务 LeanMessage,开始聊天。
  4. 调用 -[[LCChatKit sharedInstance] closeWithCallback:] 关闭 LeanCloud 的 IM 服务,结束聊天。
  5. 实现 -[[LCChatKit sharedInstance] setFetchProfilesBlock:],设置用户体系,里面要实现如何根据 userId 获取到一个 User 对象的逻辑。ChatKit 会在需要用到 User 信息时调用你设置的这个逻辑。 LCCKUserSystemService.h 文件中给出了例子,演示了如何集成 LeanCloud 原生的用户系统 AVUser
  6. 如果你实现了 -[[LCChatKit sharedInstance] setGenerateSignatureBlock:] 方法,那么 ChatKit 会自动为以下行为添加签名:open(开启聊天)、start(创建对话)、kick(踢人)、invite(邀请)。反之不会。

下面按步骤进行详细的介绍。









0 0
原创粉丝点击