美文网首页微服务开发实战编程笔记
微服务开发实战协议篇之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

参考资料

相关文章

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

    概述 大多数的微服务, 基于 HTTP REST 协议就够了. 但是HTTP 1.0 的 request/resp...

  • XMPP - 协议简介

    要学习基于XMPP协议的IM开发,首先要熟悉XMPP协议本身。 XMPP协议的组成主要的XMPP 协议范本及当今应...

  • iOS------XMPP实现一个简单的聊天页面

    XMPP协议的优点: 开放-------XMPP协议是自由,开放,公开的,并且易于了解.而且在客户端,服务器,组件...

  • xmpp协议初识

    XMPP简介 XMPP协议简介 XMPP协议(Extensible Messaging and PresenceP...

  • 初识openfire

    概念 openfire是开源的、基于可拓展通讯和表示协议(XMPP)、采用Java编程语言开发的实时协作服务器。 ...

  • XMPP(更新中...)

    XMPP(更新中...) 什么是XMPP XMPP协议是由JSF开源组织开发的,不属于任何机构,保证了开放性 XM...

  • IOS 问题合集 面试

    是否使用过XMPP,XMPP的实现? 环信是一个即时通信的服务提供商 环信使用的是XMPP协议,它是再XMPP的基...

  • XMPP——可扩展通讯和表示协议

    可扩展通讯和表示协议 (XMPP) 可用于服务类实时通讯、表示和需求响应服务中的XML数据元流式传输。XMPP以J...

  • Android IM 推送开发之基于 Openfire+Smac

    Android IM之基于Openfire+Smack的聊天服务器的搭建与测试 Android基于XMPP开发(一...

  • A Simply IM Prototype

    即时通讯也就是 IM,QQ,微信等的总称。即时通讯协议有XMPP,MQTT等。XMPP协议在 IM 上生态较为完善...

网友评论

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

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

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