NATS连线协议具体解释

作者:chszs,未经博主同意不得转载。经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs

NATS的连线协议是一个简单的、基于文本的公布/订阅风格的协议。

client连接到gnatsd(NATSserver)。并与gnatsd进行通信。通信基于普通的TCP/IP套接字,并定义了非常小的操作集,换行表示终止。

与传统的、使用了二进制消息格式的消息通信系统不同。使用了基于文本的NATS协议,使得client实现非常easy。能够方便地选择多种编程语言或脚本语言来实现。

9、NATS协议约定

  • 主题名(Subject Name)

    主题名包括响应主题(收件箱)名,是大写和小写敏感的,必须是非空字符串,不能包括空格,能够在字符串中使用“.”符号,比方:

    FOO、BAR、foo.bar、foo.BAR、FOO.BAR、FOO.BAR.BAZ 这些都是有效的主题名。

  • 通配符

    NATS支持在主题订阅中使用“*”通配符。

    星号“*”匹配主题的随意级别的随意字符。

    大于号“>”匹配后面的随意字符。

    比方foo.>匹配foo.bar和foo.bar.baz.1。但不匹配foo

    通配符必须被标识分隔。比方foo..baz和foo.>都是有效的。而foo.bar、f*o.b*r和foo>都是无效的。

  • 域分隔符

    NATS协议消息的域使用空格符或\t进行分隔。多个空格会被视为一个空格。

  • 新行

    与那些基于文本的协议一样,NATS使用CR+LF(也即\r\n。0X0D0A)作为协议消息的终止。

    新行还用于标记在PUB或MSG协议消息的实际有效负载。

10、NATS协议消息

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

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

11、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,"auth_required":false,"ssl_required":false,"max_payload":1048576}

CONNECT

语法CONNECT {[“option_name”:option_value],…}

有效的选项例如以下:

  • verbose打开+OK协议确认
  • pedantic:打开附带的严格格式检查。比方正确的主题名
  • ssl_required:指示client是否须要SSL连接
  • auth_token:client授权令牌
  • user:连接的username(假设设置了auth_required)
  • pass:连接的password(假设设置了auth_required)
  • name:client名(可选项)
  • lang:client的实现语言
  • version:client的版本号

描写叙述:

CONNECT消息与INFO消息类似,一旦client与NATSserver建立了TCP/IP套接字连接,且server接收到INFO消息,client还能够发送CONNECT消息到NATSserver,以便提供关于当前连接的更具体的信息和安全信息。

样例:以下是来自Golangclient的一个样例:

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

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

NATS连线协议具体解释的更多相关文章

  1. VRRP协议具体解释

    转帖:http://blog.chinaunix.net/space.php?uid=11654074&do=blog&id=2857384 Contents              ...

  2. HTTP协议具体解释

    HTTP是一个属于应用层的面向对象的协议.因为其简捷.高速的方式.适用于分布式超媒体信息系统. 它于1990年提出,经过几年的使用与发展,得到不断地完好和扩展.眼下在WWW中使用的是HTTP/1.0的 ...

  3. ARP协议具体解释之Gratuitous ARP(免费ARP)

    ARP协议具体解释之Gratuitous ARP(免费ARP) Gratuitous ARP(免费ARP) Gratuitous ARP也称为免费ARP.无故ARP.Gratuitous ARP不同于 ...

  4. TCP协议具体解释(上)

     TCP协议具体解释 3.1 TCP服务的特点 TCP协议相对于UDP协议的特点是面向连接.字节流和可靠传输. 使用TCP协议通信的两方必须先建立链接.然后才干開始数据的读写.两方都必须为该链接分 ...

  5. ARP协议具体解释之ARP动态与静态条目的生命周期

    ARP协议详细解释之ARP动态与静态条目的生命周期 ARP动态条目的生命周期 动态条目随时间推移自己主动加入和删除. q  每一个动态ARP缓存条目默认的生命周期是两分钟.当超过两分钟,该条目会被删掉 ...

  6. SNMP协议具体解释

    简单网络管理协议(SNMP)是TCP/IP协议簇的一个应用层协议.在1988年被制定,并被Internet体系结构委员会(IAB)採纳作为一个短期的网络管理解决方式:因为SNMP的简单性,在Inter ...

  7. UDP协议相关解释

    UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层 ...

  8. Robots协议具体解释

    禁止搜索引擎收录的方法(robots.txt) 一.什么是robots.txt文件? 搜索引擎通过一种程序robot(又称spider),自己主动訪问互联网上的网页并获取网页信息.您能够在您的站点中创 ...

  9. 痞子衡嵌入式:ARM Cortex-M调试那些事(1)- 4线协议标准(JTAG)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是嵌入式调试里的接口标准JTAG. 在结束<ARM Cortex-M文件那些事>系列文章之后,痞子衡休整了一小段时间,但是讲课的 ...

随机推荐

  1. text-shadow的用法详解

    1.兼容性:text-shadow 和 box-shadow 这两个属性在主流现代浏览器上得到了很好的支持( > Chrome 4.0, > Firefox 3.5, > Safar ...

  2. Mysql5.7多源复制,过滤复制一段时间后增加复制一个库的实现方法

    多源复制如果是整个实例级别的复制,那不存在下面描述的情况. 如果是对其中一个或多个主实例都是过滤复制,并且运行一段时间后,想在这个源上再增加一个库怎么实现?   主1:192.168.1.10 330 ...

  3. selenium爬虫设置headers,代理IP等方法

    https://blog.csdn.net/xc_zhou/article/details/80823855

  4. 一起看看 scrollHeight,clientHeight,offsetHeight,scrollTop是个啥

    scrollHeight最终数值的组成: var scrollHeight = currentElementContent.height +currentElement.paddingTop+curr ...

  5. python3爬虫-通过requests获取安居客房屋信息

    import requests from fake_useragent import UserAgent from lxml import etree from http import cookiej ...

  6. 3.5.6 关系和boolean运算符

        Java包含丰富的关系运算符.要检测相等性,可以使用两个等号 == .例如, 3 == 7  的值为 false.       另外可以使用 != 检测不相等.例如,  3  ! = 7 的值 ...

  7. 【OpenCV, MFC, DIP】向图像中加入各种噪声

    1.椒盐噪声 Mat dstImage = srcImage.clone(); ; k < n; k++) { //随机取值行列 int i = rand() % dstImage.rows; ...

  8. 【17】AngularJS Bootstrap

    AngularJS Bootstrap AngularJS 的首选样式表是 Twitter Bootstrap, Twitter Bootstrap 是目前最受欢迎的前端框架. Bootstrap 你 ...

  9. HDU 482 String

    String Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 482 ...

  10. TensorFlow Ops

    TensorFlow Ops 1. Fun with TensorBoard In TensorFlow, you collectively call constants, variables, op ...