即时通信原理
来源:互联网 发布:start here mac.app 编辑:程序博客网 时间:2024/05/16 11:17
一、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客户端收到后将显示这些好友列表及其在线状态。
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协议。
三、Leancloud三方库Chatkit
1.使用方法
为了让这个库更易入手,避免引入过多公开的类和概念,我们采用了类似「组件化」的方式进行构建,即将你在使用 ChatKit 库时所需要用到的所有方法都放在了 LCChatKit
这一个类中。它是一个 Mediator,是整个库的入口,也是中枢。
2.使用Chatkit的步骤:
- 在
-[AppDelegate application:didFinishLaunchingWithOptions:]
中调用-[LCChatKit setAppId:appKey:]
来开启 LeanCloud 服务。 - 调用
-[LCChatKit sharedInstance]
来初始化一个单例对象。 - 调用
-[[LCChatKit sharedInstance] openWithClientId:callback:]
开启 LeanCloud 的 IM 服务 LeanMessage,开始聊天。 - 调用
-[[LCChatKit sharedInstance] closeWithCallback:]
关闭 LeanCloud 的 IM 服务,结束聊天。 - 实现
-[[LCChatKit sharedInstance] setFetchProfilesBlock:]
,设置用户体系,里面要实现如何根据 userId 获取到一个 User 对象的逻辑。ChatKit 会在需要用到 User 信息时调用你设置的这个逻辑。LCCKUserSystemService.h
文件中给出了例子,演示了如何集成 LeanCloud 原生的用户系统AVUser
。 - 如果你实现了
-[[LCChatKit sharedInstance] setGenerateSignatureBlock:]
方法,那么 ChatKit 会自动为以下行为添加签名:open
(开启聊天)、start
(创建对话)、kick
(踢人)、invite
(邀请)。反之不会。
下面按步骤进行详细的介绍。
- 即时通信原理
- 即时通信聊天工具的原理与设计
- android之IM即时通信原理
- 即时通信XMPP协议实现原理介绍
- 即时通信聊天工具的原理与设计
- 即时通信聊天工具的原理与设计
- 即时通信
- 即时通信
- IOS- 即时通讯原理,使用XMPPFramework实现即时通信
- 即时通信(IMPS)
- 局域网即时通信软件
- 局域网即时通信软件
- 如何实现即时通信?
- 即时通信工具
- 如何实现即时通信?
- socket 实现即时通信
- 即时通信学习笔记
- android socket 即时通信
- 报表——Fast Report
- 接下来两周的计划
- Rectangles 简单几何计算
- Java基础(接口与抽象类)
- android之as自动化删除无用资源为apk瘦身
- 即时通信原理
- 第三章,jsp内置对象的文字乱码处理
- Mac OS X下利用MPI进行并行计算
- 微信小程序
- HTML/CSS基础知识总结二:选择器
- USACO FEB 2009,Stock Market(股票市场)
- 各种优化方法总结比较(sgd/momentum/Nesterov/adagrad/adadelta)
- android5.1真机调试报找不到so的错误
- 串口修改时间