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. Spinner实现列表下拉功能

    public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener { ...

  2. taskctl命令行类(sh、exe、python新增scp)插件升级扩展

    转载自: http://www.taskctl.com/forum/detail_129.html 上次写了一个帖子 TASKCTL中不使用代理,通过ssh免密连接执行远程脚本配置(SSH插件扩展)h ...

  3. JDBC性能优化

    一.使用PreparedStatement的Batch功能 参见本人一下文章:http://blog.csdn.net/lmb55/article/details/50631062 二.选择合适的光标 ...

  4. 远程监视jboss应用java内存的配置(实测) .

    前言 因为最近一个项目部署在客户那边运行一个月左右就会出现java内存溢出的问题,为了时时监控java内存的情况需要,需要远程查看服务器上java内存的一些情况.在公司模拟部署了远程监视linux下项 ...

  5. Farseer.net轻量级开源框架 中级篇:数据库切换

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: 动态数据库访问 下一篇:Farseer.net轻量级开源框架 中级篇: SQL执行 ...

  6. CPU位数、操作系统位数、机器字长、C/C++基本数据类型长度

    1.CPU位数=CPU中寄存器的位数=CPU能够一次并行处理的数据宽度(位数)=数据总线宽度: //现在的计算机处理器一般都是64位,这是硬件的事. 2.CPU为了实现其功能设计了指令集,即是CPU的 ...

  7. POJ_2536_Gopher II

    题意:n只地鼠,m个地鼠洞,地鼠必须以v的速度在s秒内钻进洞且每个洞仅能容纳一只地鼠,问最少有几只地鼠会被老鹰吃掉. 分析:最大匹配问题,将s秒内地鼠能够跑到的洞与该地鼠连成一条边,在最后得到的图中使 ...

  8. R中矩阵运算

    # 数据产生 # rnorm(n, mean = 0, sd = 1) 正态分布的随机数(r 代表随机,可以替换成dnorm, pnorm, qnorm 作不同计算.r= random = 随机, d ...

  9. C: 字符数组中的空去掉

    #include <stdio.h> #include <string.h> int main() { char a[50] = "nearby! "; i ...

  10. MyBatis 创建核心配置文件和 SQL 映射文件

    Mybatis 的两个配置文件(mybatis-config.xml  和 xxxMapper.xml)都为 xml 类型,因此在 eclipse 中创建 xml 文件命名为相应的 mybatis-c ...