• NATS_04:NATS协议详解


    NATS的协议是一个简单的、基于文本的发布/订阅风格的协议。客户端连接到 gnatsd(NATS服务器),并与 gnatsd 进行通信,通信基于普通的 TCP/IP 套接字,并定义了很小的操作集,换行表示终止。与传统的、使用了二进制消息格式的消息通信系统不同,使用了基于文本的 NATS 协议,使得客户端实现很简单,可以方便地选择多种编程语言或脚本语言来实现。

     NATS协议约定

    • 主题名(Subject Name) 
      主题名包括响应主题(收件箱)名,是大小写敏感的,必须是非空字符串,不能包含空格,可以在字符串中使用 “.” 符号,比如: 
      FOO、BAR、foo.bar、foo.BAR、FOO.BAR、FOO.BAR.BAZ 这些都是有效的主题名。
    • 通配符 
      NATS支持在主题订阅中使用 “*” 通配符, 星号 “*” 匹配主题的任意级别的任意字符。 
      大于号 “>” 匹配后面的任意字符。比如 foo.> 匹配 foo.bar 和 foo.bar.baz.1,但不匹配 foo 
      通配符必须被标识分隔。比如 foo.bar 和 foo.> 都是有效的,而 foo..bar、f*o.b*r 和 foo> 都是无效的。
    • 域分隔符 
      NATS协议消息的域使用 空格符 或 \t 进行分隔。多个空格会被视为一个空格。
    • 新行 
      与那些基于文本的协议一样,NATS使用 CR+LF(也即\r\n,0X0D0A)作为协议消息的终止。新行还用于标记在 PUB 或 MSG 协议消息的实际有效负载。

     NATS协议消息

      下面的表格描述了NATS协议消息,要注意操作名是大小写不敏感的,因此 SUB foo 1\r\n 和 sub foo 1\r\n 是等价的。

    —————————————————————————————————————————————————————————————
     操作名   |    发送端    |               描述
    —————————————————————————————————————————————————————————————
    INFO         服务器       初始化TCP/IP连接后发送给客户端
    CONNECT      客户端       发送给服务器指定连接信息
    PUB          客户端       发布消息到主题或Reply主题
    SUB          客户端       订阅主题(或主题通配符)
    UNSUB        客户端       取消订阅主题(或自动取消订阅)
    MSG          服务器       交付一条消息负载给订阅者
    PING         两端         保持连接有效的PING活跃消息
    PONG         两端         保持连接有效的PONG活跃消息
    +OK          服务器       确认详细(Verbose)模式下协议消息的合法
    -ERR         服务器       指示协议错误,会导致客户端断开连接
    —————————————————————————————————————————————————————————————

     NATS协议消息的例子

      下面是使用 Telnet 连接 demo.nats.io 站点的例子:

    telnet demo.nats.io 4222
    
    Trying 107.170.221.32...
    Connected to demo.nats.io.
    Escape character is '^]'.
    INFO {"server_id":"1ec445b504f4edfb4cf7927c707dd717","version":"0.6.6","go":"go1.4.2","host":"0.0.0.0","port":4222,"

     CONNECT

      语法 CONNECT {[“option_name”:option_value],…} 有效的选项如下:

    • verbose打开+OK协议确认
    • pedantic:打开附带的严格格式检查,比如正确的主题名
    • ssl_required:指示客户端是否需要SSL连接
    • auth_token:客户端授权令牌
    • user:连接的用户名(如果设置了auth_required)
    • pass:连接的密码(如果设置了auth_required)
    • name:客户端名(可选项)
    • lang:客户端的实现语言
    • version:客户端的版本

    描述: 
      CONNECT消息与INFO消息相似,一旦客户端与NATS服务器建立了TCP/IP套接字连接,且服务器接收到INFO消息,客户端还可以发送CONNECT消息到NATS服务器,以便提供关于当前连接的更详细的信息和安全信息。

    例子:下面是来自Golang客户端的一个例子:

    1
    CONNECT {"verbose":false,"pedantic":false,"ssl_required":false,"name":"","lang":"go","version":"1.1.0"}\r\n

      大多数客户端都设置了Verbose模式为false(缺省设置),这意味着服务器在接收到消息后不会发送+OK消息给客户端。

  • 相关阅读:
    ThinkPHP 3.2 调用自定义函数库
    phpstorm 2017版代码提示功能开启解决方案
    phpstorm 2017激活
    JavaScript返回上一页和返回上一级页面并刷新
    PHP处理Ajax请求与Ajax跨域
    13个能快速开发android的经典项目
    分享6款优秀的 AR/VR 开源库
    Android-----购物车(包含侧滑删除,商品筛选,商品增加和减少,价格计算,店铺分类等)
    Android------视频播放器(包含全屏播放,快退,快进,腾讯新闻的列表播放等)
    吴恩达课后作业学习2-week1-2正则化
  • 原文地址:https://www.cnblogs.com/wuyuan2011woaini/p/15964037.html
Copyright © 2020-2023  润新知