# 协议演示

## Protocol Demo

The virtues of the NATS protocol manifest quickly when you experience how easy it is to use NATS. Because the NATS protocol is text-based, you can use NATS across virtually any platform or language. In the following demo we use [Telnet](https://en.wikipedia.org/wiki/Telnet).

On the wire you can publish and subscribe using a simple [set of protocol commands](/cn/can-kao/reference-protocols/nats-protocol.md).

## Instructions

**1. Open a terminal session.**

You'll use this terminal as the subscriber.

**2. Connect to NATS.**

```shell
telnet demo.nats.io 4222
```

Expected result:

```
Trying 107.170.221.32...
Connected to demo.nats.io.
Escape character is '^]'.
INFO {"server_id":"NCXMJZYQEWUDJFLYLSTTE745I2WUNCVG3LJJ3NRKSFJXEG6RGK7753DJ","version":"2.0.0","proto":1,"go":"go1.11.10","host":"0.0.0.0","port":4222,"max_payload":1048576,"client_id":5089}
```

**3. Run the subscriber.**

Subscribe to the wildcard subject `foo.*` with subject ID of `90`.

```
sub foo.* 90
```

Subscriber result: `+OK` indicating successful interest registration.

```
sub foo.* 90
+OK
```

**4. Open a second terminal window.**

You'll use this terminal for the publisher.

**5. Connect to NATS.**

```shell
telnet demo.nats.io 4222
```

Expected result:

```
Trying 107.170.221.32...
Connected to demo.nats.io.
Escape character is '^]'.
INFO {"server_id":"NCXMJZYQEWUDJFLYLSTTE745I2WUNCVG3LJJ3NRKSFJXEG6RGK7753DJ","version":"2.0.0","proto":1,"go":"go1.11.10","host":"0.0.0.0","port":4222,"max_payload":1048576,"client_id":5089}
```

**6. Publish a message.**

The message includes the command (`pub`), subject (`foo.bar`), and length of the payload (`5`). Press enter and provide the payload (`hello`), then press enter again.

```
pub foo.bar 5
hello
```

Publisher result: `+OK` indicating message publication.

```
pub foo.bar 5
hello
+OK
```

Subscriber result: `MSG` + subject name + subscription ID + message payload size + message payload `hello`.

```
sub foo.* 90
+OK
MSG foo.bar 90 5
hello
```

**7. Publish another message with reply subject.**

```
pub foo.bar optional.reply.subject 5
hello
+OK
```

Subscriber result: `MSG` indicating message receipt.

```
MSG foo.bar 90 optional.reply.subject 5
hello
```

**8. Unsubscribe from interest in the subject.**

You can use the `UNSUB` command to unsubscribe from a message.

Run the subscriber to unsubscribe:

```
unsub 90
```

Subscriber result: `+OK` indicating successful deregistration of interest.

```
unsub 90
+OK
```

**9. Reconnect to server and subscribe.**

```shell
telnet demo.nats.io 4222
```

```
sub foo.* 90
```

**10. Explore the ping/pong interval.**

If you leave your telnet session open for a few minutes, you may notice that your clients receives `ping` requests from the server. If your client is not active, or does not respond to the server pings within the ping/pong interval, the server disconnects the client. The error message is `-ERR 'Stale Connection'`.

You can send a `ping` request to the serve and receive a `PONG` reply. For example:

```
Connected to demo.nats.io.
Escape character is '^]'.
INFO {"server_id":"NCXMJZYQEWUDJFLYLSTTE745I2WUNCVG3LJJ3NRKSFJXEG6RGK7753DJ","version":"2.0.0","proto":1,"go":"go1.11.10","host":"0.0.0.0","port":4222,"max_payload":1048576,"client_id":5089}

ping
PONG
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.natsclub.cn/cn/can-kao/reference-protocols/nats-protocol-demo.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
