ios开发IM与音视频

IM

 

各种聊天协议

首先我们以实现方式来切入,基本上有以下四种实现方式:

  1. 基于Scoket原生:代表框架 CocoaAsyncSocket
  2. 基于WebScoket:代表框架 SocketRocket
  3. 基于MQTT:代表框架 MQTTKit
  4. 基于XMPP:代表框架 XMPPFramework

注意:

MQTTXMPP为聊天协议,它们是最上层的协议,

WebScoket是传输通讯协议,它是基于Socket封装的一个协议。

通常我们所说的腾讯IM的私有协议,就是基于WebScoket或者Scoket原生进行封装的一个聊天协议。

为什么说基于TCP的移动端IM仍然需要心跳保活?

在使用 TCP 长连接的 IM 服务设计中,往往都会涉及到心跳。心跳一般是指某端(绝大多数情况下是客户端)每隔一定时间向对端发送自定义指令,以判断双方是否存活,因其按照一定间隔发送,类似于心跳,故被称为心跳指令。

TCP KeepAlive 是用于检测连接的死活,而心跳机制则附带一个额外的功能:检测通讯双方的存活状态。

真正需要心跳机制的原因其实主要是在于国内运营商NAT超时。

一、MQTT 

MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,专为低带宽、高延迟或不可靠网络环境设计。它基于发布 - 订阅模式,广泛应用于物联网(IoT)、移动应用和实时数据传输场景。

1. 协议特点
  • 轻量级:固定报头仅 2 字节,最小化网络开销。
  • 低功耗:适合电池供电的 IoT 设备。
  • 异步通信:基于发布 - 订阅模式,解耦生产者与消费者。
  • QoS 支持:提供三种服务质量等级(QoS 0/1/2)。
  • 遗言机制:客户端异常断开时Broker 自动发布预设消息。
2. 核心组件

Broker(代理服务器):中央消息服务器,接收发布者消息并路由至订阅者。

Client(客户端):发布者(Publisher)和订阅者(Subscriber)的统称。

Topic(主题):消息的逻辑分类,使用层级结构(如home/livingroom/temp)。

QoS(服务质量)

  • QoS 0:最多一次(可能丢失)。
  • QoS 1:至少一次(可能重复)。
  • QoS 2:恰好一次(确保不丢失、不重复)。
3. 消息流示例
  1. 客户端 A连接到 Broker。
  2. 客户端 A订阅主题home/kitchen/temp(QoS 1)。
  3. 客户端 B发布温度数据到主题home/kitchen/temp(QoS 1)。
  4. Broker将消息路由至所有订阅该主题的客户端(包括 A)。
  5. 客户端 A接收消息并处理。
4. 常用库:MQTTClient
pod 'MQTTClient'

二、XMPP

XMPP(Extensible Messaging and Presence Protocol)是一种基于 XML 的开放式实时通信协议,最初用于即时通讯(IM),现广泛应用于社交网络、物联网、协作工具等领域。

1. 协议特点
  • 基于 XML:消息格式为 XML,易读性强,但开销较大。
  • 去中心化:采用分布式架构,不同服务器可互相通信(Federation)。
  • 扩展性:通过 XEP(XMPP Extension Protocols)支持丰富功能。
  • 实时性:基于长连接,支持即时消息和状态通知(Presence)。
2. 消息流程
  1. 用户 Aalice@example.com)连接到服务器example.com
  2. 用户 Bbob@example.net)连接到服务器example.net
  3. AB发送消息:
  4.  example.com服务器将消息路由至example.net服务器。

  5. **example.net**将消息转发给B。
<message to="bob@example.net" from="alice@example.com">
    <body>Hello, Bob!</body>
</message>

三、总结与建议

    <
    协议 MQTT HTTP WebSocket AMQP CoAP
    协议层 应用层
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值