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. Android ViewPager+HorizontalScrollView实现标题栏滑动(腾讯新闻)

    1) ViewPager提供了左右滑动切换页面的方法,但是它所提供的标题只是无语,估计没有真正的项目会照搬拿过来;并且它只能一页一页滑,我想直接查看最后一页要滑半天; 2) 看了腾讯新闻客户端感觉体验 ...

  2. 如何利用sql注入进行爆库

    SQL注入能做什么 在<SQL注入基础>一文介绍了SQL注入的基本原理和实验方法,那接下来就要问一下,SQL注入到底能什么? 估计很多朋友会这样认为:利用SQL注入最多只能获取当前表中的所 ...

  3. Spring scheduled cron 表达式

    一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素. 按顺序依次为 秒(0~59) 分钟(0~59) 小时(0~23) 天(月)(0~31,但是你需要考虑你月的天数) 月(0~11) 天( ...

  4. Codeforces_750_C_(二分查找)

    C. New Year and Rating time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  5. HDU_3172_带权并查集

    Virtual Friends Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  6. Xamarin绑定ios静态库

    以下是官方的步骤介绍,我就不再一步步解释了 https://docs.microsoft.com/zh-cn/xamarin/ios/platform/binding-objective-c/walk ...

  7. 梦想CAD控件 2018.10.15更新

    下载地址: http://www.mxdraw.com/ndetail_10105.html 1. 完善com接口的ToCurves函数,转换CAD文字,多行文字到曲线 2. 修改DrawImage接 ...

  8. 洛谷——P2158 [SDOI2008]仪仗队

    P2158 [SDOI2008]仪仗队 找规律大水题嘛,如果你做过P1170 兔八哥与猎人 这题得到的规律是$a,b,c,d$,若$gcd(a-b,c-d)==1$ 那么$a,b$就能看到$c,d$ ...

  9. MySQL数据库开启、关闭、查看函数功能的方法

    应用 MySQL 时,会遇到不能创建函数的情况.出现如下错误信息: ERROR 1418 : This function has none of DETERMINISTIC, NO SQL, or R ...

  10. java容器(数组和集合)内元素的排序问题

    package com.janson.day20180827; import java.util.*; /** * java中容器内对象的排序可以通过Collections.sort()和Arrays ...