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. windows系统下的redis启动教程

    下载解压后配置redis.conf文件配置端口号和密码,打开poweshell命令,进入redis解压目录,使用.\redis-server.exe redis.conf 命令启动redis服务,再打 ...

  2. Filesystem Hierarchy Standard (Unix, Linux etc)

    http://www.pathname.com/fhs/ /boot -- Static files of the boot loader Purpose: contains everything r ...

  3. CAD使用GetxDataDouble读数据(网页版)

    主要用到函数说明: MxDrawEntity::GetxDataDouble2 读取一个Double扩展数据,详细说明如下: 参数 说明 [in] LONG lItem 该值所在位置 [out, re ...

  4. 用Docker构建Nginx镜像

    1构建Nginx镜像 1建立工作目录 [root@localhost ]# mkdir 1nginx [root@localhost 1nginx]# cd 1nginx/ [root@localho ...

  5. 继 S-HR之代码创建临时表并插入数据 完整功能之员工职业信息变更报表

    目的示例1: 制作员工职业信息报表[S-HR系统的报表其实就是列表o.0,醉了] EcirrWithPP.js shr.defineClass("shr.custom.EcirrWithPP ...

  6. 框架学习八:二维码(Zxing)

    本文转自夏神:http://blog.csdn.net/xiaanming/article/details/10163203 一.用什么 二维码扫描用的google的开源框架Zxing. 二.下载 地 ...

  7. ios8 UITableView设置 setSeparatorInset:UIEdgeInsetsZero不起作用的解决办法(去掉15px空白间距)

    但是在ios8中,设置setSeparatorInset:UIEdgeInsetsZero 已经不起作用了.下面是解决办法: 首先在viewDidLoad方法加入以下代码: if(leftTable! ...

  8. [USACO06JAN] 牛的舞会 The Cow Prom

    题目描述 The N (2 <= N <= 10,000) cows are so excited: it's prom night! They are dressed in their ...

  9. Hadoop Mapreduce 中的FileInputFormat类的文件切分算法和host选择算法

    文件切分算法 文件切分算法主要用于确定InputSplit的个数以及每个InputSplit对应的数据段. FileInputFormat以文件为单位切分成InputSplit.对于每个文件,由以下三 ...

  10. layui laypage 当前页刷新问题

    困扰了好几天的问题,终于找到答案了 在执行完代码后添加下面的代码实现当前页的刷新 $(".layui-laypage-btn").click(); 在解决问题的过程中,其实已经注意 ...