微服务开发实战协议篇之XMPP - TBD

概述

大多数的微服务, 基于 HTTP REST 协议就够了. 但是HTTP 1.0 的 request/response 请求/应答模式在即时消息应用这一类的微服务就不太适用了。

所以这时可以考虑协议 XMPP 和 MQTT , 甚至基于 WebSocket 的二进制消息。

XMPP(可扩展的消息传递和存在协议)专门为即时消息应用设计的协议。
XMPP 历史稍长,比较成熟,应用和库也比较多,比如Jabber, Google Talk(现在改为 Hangouts 环聊),WhatsApp。 但是所使用的 XML 也比较繁琐, 消息体比较大, 所以在移动网络和物联网中有些力不从心。

MQTT(MQ Telemetry Transport)专门为 IoT 物联网的设备所设计的一种通信协议,适用于功率, 容量和计算能力比较低的设备。 它快速和可靠,消息体小,传输和解析效率比较高。比较 Facebook Messenger 就使用 MQTT。 但是它应用不广,参考资料和相关的软件库不多。先来重点谈谈 XMPP

XMPP

XMPP 即 eXtensible Messaging and Presence Protocol 扩展消息和出席协议
它是以一种双向的流式XML表示的即时消息应用协议

大家最熟悉的即时消息应用莫过于 QQ 和微信了, 腾讯使用的是自己的私有协议, 而 XMPP 是开放的公有协议, 任何人都可以参考和免费使用

XMPP 有两个主要的协议

  • XMPP Core - RFC6120 XMPP 核心协议
微服务开发实战协议篇之XMPP - TBD_第1张图片
XMPP Core
  • XMPP Instant Messaging and Presence - RFC6121 XMPP 即时消息和出席协议
微服务开发实战协议篇之XMPP - TBD_第2张图片
XMPP IM

还有许多扩展的协议(http://xmpp.org/extensions), 常用的有

  • XEP-0045 (PDF) Multi-User Chat
微服务开发实战协议篇之XMPP - TBD_第3张图片
XMPP MUC
  • XEP-0030 (PDF) Service Discovery
  • XEP-0020 (PDF) Feature Negotiation
  • XEP-0060 (PDF) Publish-Subscribe
  • XEP-0047 (PDF) In-Band Bytestreams
  • XEP-0004 (PDF) Data Forms
  • XEP-0166 (PDF) Jingle

术语

  • bare JID : 基本JID
    localpart@domainpart
  • full JID: 完整 JID, 区别是加上了资源部分
    localpart@domainpart/resourcepart
  • XML stanza: XML 节, 即一个XMPP的XML 消息
  • route: 路由, 一个消息经由什么路径发到目的地

XMPP stream 搭建过程

微服务开发实战协议篇之XMPP - TBD_第4张图片
Simple connect flow
participant client as client
participant server as server

client->server: 1) start stream
server-->client: 2) start stream and features
client->server: 3) auth
server-->client: 4) success
note over client, server: sasl negotiation success
client->server: 5) restart stream
server-->client: 6) restart stream and features
client->server: 7) resource bind iq
server-->client: 8) iq result

微服务开发实战协议篇之XMPP - TBD_第5张图片
connect, auth and resource bind
participant client as client
participant server as server

client->server: 1) start stream
server-->client: 2) start stream and features
client->server: 3) starttls
server-->client: 4) proceed
note over client, server: tls negotiation success
client->server: 5) restart stream
server-->client: 6) restart stream and features
client->server: 7) auth
server-->client: 8) challenge
client->server: 9) response
server-->client: 10) success
note over client, server: sasl negotiation success
client->server: 11) restart stream
server-->client: 12) restart stream and features
client->server: 13) resource bind iq
server-->client: 14) iq result
client->server: 15) session iq
server-->client: 16) iq result

架构

  • Global addresses
  • Presence
  • Persistent Streams
  • Structured Data
  • Distributed Network of Clients and Servers

XML stanza

XML 节




presence

  • presence
    • type
      • subscribe
      • subscribed
      • unavailable
    • child
      • delay
      • show
        • chat
        • away
        • xa
        • dnd
      • status
      • priorities 优先级,如果同一帐号来自不同设备
    • directed presence: not for all roster, just for one

iq

  • iq
    • request
      • get
      • set
    • response
      • result
      • error

message

  • message
    • normal
    • chat
    • groupchat
    • headline
    • error

FAQ

How to open a stream

      
      

The stream negotiation process

How to close a stream

The directionality of XML streams

How to handle peers that are silent

The XML attributes of a stream

The XML namespaces of a stream

Error handling related to xML streams

MQTT

参考资料

  • xmpp.org
  • mqtt.org
  • XMPP-IoT-protocol-winner-or-second-place-to-MQTT

你可能感兴趣的:(微服务开发实战协议篇之XMPP - TBD)