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 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":,"
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客户端的一个例子:
CONNECT {"verbose":false,"pedantic":false,"ssl_required":false,"name":"","lang":"go","version":"1.1.0"}\r\n
大多数客户端都设置了Verbose模式为false(缺省设置),这意味着服务器在接收到消息后不会发送+OK消息给客户端。
NATS_04:NATS协议详解的更多相关文章
- NATS—协议详解(nats-protocol)
NATS的协议是一个简单的.基于文本的发布/订阅风格的协议.客户端连接到 gnatsd(NATS服务器),并与 gnatsd 进行通信,通信基于普通的 TCP/IP 套接字,并定义了很小的操作集,换行 ...
- HTTP协议详解(转)
转自:http://blog.csdn.net/gueter/archive/2007/03/08/1524447.aspx Author :Jeffrey 引言 HTTP是一个属于应用层的面向对象的 ...
- HTTP协议详解
Author :Jeffrey 引言 HTTP 是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和 扩展. ...
- 动态选路、RIP协议&&OSPF协议详解
动态选路.RIP协议&&OSPF协议详解 概念 当相邻路由器之间进行通信,以告知对方每个路由器当前所连接的网络,这时就出现了动态选路.路由器之间必须采用选路协议进行通信,这样的选路协议 ...
- ASP.NET知识总结(3.HTTP协议详解)
引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...
- 接口测试之HTTP协议详解
引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...
- 计算机网络(12)-----HTTP协议详解
HTTP协议详解 http请求 http请求由三部分组成,分别是:请求行.消息报头.请求正文 (1)请求行 请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:Metho ...
- OSPF协议详解
CCNP OSPF协议详解 2010-02-24 20:30:22 标签:CCNP 职场 OSPF 休闲 OSPF(Open Shortest Path Fitst,ospf)开放最短路径优先协议,是 ...
- HTTP协议详解(真的很经典)
HTTP 是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和 扩展.目前在WWW中使用的是HTTP/1.0 ...
随机推荐
- cnblogs用户体验及建议
一.是否提供了良好的体验给用户(同时提供价值)? 我觉得博客园还是给用户提供了良好的用户体验的,它可以从用户的角度考虑,用户在注册的时候,用户自己在设置用户名和密码的时候,如果与他人重复会有提示,而且 ...
- caffe with anaconda
https://blog.csdn.net/u013498583/article/details/74231058 https://www.cnblogs.com/youxin/p/4073703.h ...
- HDU 4123 Bob’s Race 树形dp+单调队列
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4123 Time Limit: 5000/2000 MS (Java/Others) Memory L ...
- ubuntu安装php-curl拓展
首先输入apt-cache search curl | grep php查询curl的php支持名字可能会返回如下内容:php5-curl - CURL module for php5安装:sudo ...
- java异常处理及自定义异常的使用
1. 异常介绍 异常机制可以提高程序的健壮性和容错性. Throwable:Throwable是java语言所有错误或异常的超类. 有两个子类Error和Exception. 1.1 编译期异常 编译 ...
- svm小问题
1.没有报错但是结果是pedicttestlabel = [] accuracy = [] 举例:(前提是装了工具箱libsvm-3.21) data=[178,80;172,75;160,50;15 ...
- 获取php版本
phpversion()函数可以获取版本 version_compare可以比较两个版本 mixed version_compare ( string $version1 , string $vers ...
- 【转】正确的 Composer 扩展包安装方法
简单解释 composer install - 如有 composer.lock 文件,直接安装,否则从 composer.json 安装最新扩展包和依赖: composer update - 从 c ...
- 深入理解JAVA虚拟机阅读笔记4——虚拟机类加载机制
虚拟机把描述类的Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 在Java语言中,类型的加载.连接和初始化过程都是 ...
- 适用于Rick的奖惩体系
适用于Rick的奖惩体系 虽然对于时间有了更加清晰的认知,但是在时间管理方面还是不够严格,源于对自身的放松要求以及不够自律.第二个是周期性的思想松懈,比如周五了,想着马上周末了. 今天中午洗碗的时候, ...