NATS—協議詳解(nats-protocol)

NATS的協議是一個簡單的、基於文本的發佈/訂閱風格的協議。客戶端連接到 gnatsd(NATS服務器),並與 gnatsd 進行通信,通信基於普通的 TCP/IP 套接字,並定義了很小的操作集,換行表示終止。與傳統的、使用了二進制消息格式的消息通信系統不同,使用了基於文本的 NATS 協議,使得客戶端實現很簡單,可以方便地選擇多種編程語言或腳本語言來實現。

 NATS協議約定

  • 主題名(Subject Name) 
    主題名包括響應主題(收件箱)名,是大小寫敏感的,必須是非空字符串,不能包含空格,可以在字符串中使用 “.” 符號,比如: 
    FOO、BAR、foo.bar、foo.BAR、FOO.BAR、FOO.BAR.BAZ 這些都是有效的主題名。
  • 通配符 
    NATS支持在主題訂閱中使用 “*” 通配符, 星號 “*” 匹配主題的任意級別的任意字符。注意:(一個*只能匹配一個級別)比如 foo.* 匹配 foo.a 但不匹配 foo.a.b,foo.*.*可以匹配 foo.a.b但不匹配foo.a.b.c
    大於號 “>” 匹配後面的任意字符。比如 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 是等價的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
—————————————————————————————————————————————————————————————
 操作名   |    發送端    |               描述
—————————————————————————————————————————————————————————————
INFO         服務器       初始化TCP/IP連接後發送給客戶端
CONNECT      客戶端       發送給服務器指定連接信息
PUB          客戶端       發佈消息到主題或Reply主題
SUB          客戶端       訂閱主題(或主題通配符)
UNSUB        客戶端       取消訂閱主題(或自動取消訂閱)
MSG          服務器       交付一條消息負載給訂閱者
PING         兩端         保持連接有效的PING活躍消息
PONG         兩端         保持連接有效的PONG活躍消息
+OK          服務器       確認詳細(Verbose)模式下協議消息的合法
-ERR         服務器       指示協議錯誤,會導致客戶端斷開連接
—————————————————————————————————————————————————————————————

注意:pub 操作只能針對具體的某個topic(收件箱),不能使用通配置符!

NATS協議消息的例子

  下面是使用 Telnet 連接 demo.nats.io 站點的例子:

1
2
3
4
5
6
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,"

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服務器,以便提供關於當前連接的更詳細的信息和安全信息。

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

  大多數客戶端都設置了Verbose模式爲false(缺省設置),這意味着服務器在接收到消息後不會發送+OK消息給客戶端

轉自:http://www.cnblogs.com/liang1101/p/6641348.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章