美文网首页微服务开发实战编程笔记
微服务开发实战协议篇之XMPP - TBD

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

作者: 老瓦在霸都 | 来源:发表于2017-01-15 22:34 被阅读70次

    概述

    大多数的微服务, 基于 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 Core
    • XMPP Instant Messaging and Presence - RFC6121 XMPP 即时消息和出席协议
    XMPP IM

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

    XMPP MUC

    术语

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

    XMPP stream 搭建过程

    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
    
    
    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 节

    <message/>
    <presence/>
    <iq/>
    

    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

          <?xml version='1.0'?>
          <stream:stream
              from='juliet@im.example.com'
              to='im.example.com'
              version='1.0'
              xml:lang='en'
              xmlns='jabber:client'
              xmlns:stream='http://etherx.jabber.org/streams'>
    

    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

    参考资料

    相关文章

      网友评论

      • cool_wier:你这写的什么,把维基百科的搬过来么

      本文标题:微服务开发实战协议篇之XMPP - TBD

      本文链接:https://www.haomeiwen.com/subject/onnmvttx.html