部署方式参见官方文档:

​	https://docs.nats.io/running-a-nats-service/introduction/installation

​	docker中安装nats
​		https://docs.nats.io/running-a-nats-service/nats_docker#creating-a-nats-cluster

​	nats-streaming-server:

​		https://github.com/nats-io/nats-streaming-server

​	nats-server配置：

​		https://docs.nats.io/running-a-nats-service/configuration



配置nats.conf:

```yaml
port: 4222
http_port: 8222
authorization: {
	users: [
	    {user: a, password: b},
	    {user: b, password: a}
	]
}
```

非配置启动(不带权限)：

```
./nats-server.exe
```

带配置启动：.

```
/nats-server.exe -c nats.conf	
```

集群部署：

https://docs.nats.io/running-a-nats-service/nats_docker

docker pull nats

docker network create nats

docker run -d --name nats --network nats --rm -p 4222:4222 -p 8222:8222 nats --http_port 8222 --cluster_name NATS --cluster nats://0.0.0.0:6222

docker run -d --name nats-1 --network nats --rm nats --cluster_name NATS --cluster nats://0.0.0.0:6222 --routes=nats://ruser:T0pS3cr3t@nats:6222

docker run -d --name nats-2 --network nats --rm nats --cluster_name NATS --cluster nats://0.0.0.0:6222 --routes=nats://ruser:T0pS3cr3t@nats:6222



### `nats-streaming-server` 和 `nats-server` 都是由 NATS 提供的消息队列服务，但它们的功能有所不同。下面是它们的主要区别：

#### 1. **基本功能**

- **nats-server**：这是 NATS 的核心消息传递服务，提供了一个轻量级的发布-订阅消息系统。它处理基本的消息传递功能，适用于需要快速传递消息的场景。
- **nats-streaming-server**：这是 NATS 的一个扩展版本，专门提供持久化、消息存储和流消息功能。它基于 NATS 构建，但增加了对消息持久化的支持，适用于需要保证消息不丢失并且允许客户端重新消费历史消息的场景。

#### 2. **持久化**

- **nats-server**：默认情况下，消息是无持久化的，消息一旦被消费或者过期就会被丢弃。适合对实时性要求较高的系统，但不适用于需要持久化存储消息的场景。
- **nats-streaming-server**：支持消息持久化，可以将消息存储在磁盘中，确保在节点故障后，消息不会丢失。客户端可以在任何时间点重新订阅并消费历史消息。

#### 3. **消息订阅**

- **nats-server**：提供基本的订阅功能，订阅者只会收到当前发布的消息，并且消息不会被保存。
- **nats-streaming-server**：除了支持实时订阅外，还支持“流订阅”。这意味着客户端可以订阅并消费历史消息，即使这些消息已经发布。

#### 4. **应用场景**

- **nats-server**：适用于需要高吞吐量、低延迟的实时消息传递系统，比如实时聊天、推送通知等场景。
- **nats-streaming-server**：适用于需要保证消息持久化、历史消息重放和较高可靠性的系统，比如金融交易、事件驱动的系统、日志存储等场景。

#### 5. **系统架构**

- **nats-server**：是一个更轻量级的消息传递系统，适合用于对可靠性要求较低的场景。
- **nats-streaming-server**：是一个更重型的系统，需要更多的存储空间来保存消息数据，因此系统资源消耗较高。

#### 6. **使用场景**

- **nats-server**：适用于实时应用，消息在发布后即时被消费，无需存储历史记录。适合需要极低延迟的应用，比如实时分析和监控。
- **nats-streaming-server**：适用于那些需要事件溯源和消息回放的系统，适合金融系统、任务队列等需要高可靠性和消息重放的场景。

#### 总结：

- **nats-server** 是一个轻量级、高性能的消息传递服务，适合对实时性要求较高但不需要消息持久化的应用。
- **nats-streaming-server** 是 NATS 的一个增强版，适合需要持久化、历史消息重放和更高可靠性的场景。



### 在游戏服务器之间的通信中，选择使用 `nats-server` 还是 `nats-streaming-server` 主要取决于你的需求：

#### 1. **使用 `nats-server` 的情况：**

- **低延迟需求**：如果游戏服务器之间的通信要求低延迟且实时性很高（例如实时竞技类游戏），`nats-server` 是一个更适合的选择。它非常轻量，能提供快速的消息传递。
- **简单的发布-订阅模型**：如果你不需要持久化消息或消息重放的功能，只需要发布和订阅实时数据，`nats-server` 足够满足需求。
- **高吞吐量**：`nats-server` 设计为高效的消息传递系统，能够在较大的负载下运行，适合需要高吞吐量的应用。

#### 2. **使用 `nats-streaming-server` 的情况：**

- **消息持久化和重放需求**：如果你的游戏需要保证消息不丢失并且可能需要重新消费历史消息（例如玩家的游戏历史、事件追溯等），那么 `nats-streaming-server` 会更合适。它支持消息持久化，并且允许客户端订阅历史消息。
- **可靠性要求高**：对于一些重要的数据（比如玩家进度、物品状态等），如果需要防止数据丢失，并能够在服务器重启后恢复数据，`nats-streaming-server` 提供了更高的可靠性。
- **事件溯源**：如果游戏系统需要事件溯源或者需要根据之前的事件重新计算一些状态，`nats-streaming-server` 提供了流消息功能，可以让客户端从任何位置重新消费消息。

#### 总结：

- 如果你的游戏不需要历史消息存储，且更注重实时性和低延迟，选择 **nats-server**。
- 如果需要消息的持久化、重放以及高可靠性，选择 **nats-streaming-server**。
- 大多数实时游戏服务器会选择 **nats-server**，除非游戏需要处理复杂的历史数据或事件溯源。





