### 1、加入 Broker 集群（就像进入社交群）

需要使用 url 的 `@` 参数，给自己取个名字。当然，不加入集群也可以通过 `@` 参数给自己取名。不取名行不行？免强也行，做为游客。只能主动给有名字的玩家发消息，别人没办法给你发。

```java
public class Demo {
    public static void main(String[] args) throws Exception {
        SocketD.createClient("sd:tcp://127.0.0.1:8602?@=demoapp")
                .listen(new EventListener().doOn("hello", (s, m) -> {
                    System.out.println(m);
                }))
                .open();
    }
}

//Broker 服务端，可以通过 session.name() 获取玩家的 `@` 参数
```

如果有多个 Broker 服务？可以使用集群客户端：

```java
public class Demo {
    public static void main(String[] args) throws Exception {
        //
        //也可以不使用集群客户端，自己创建多个会话并管理即可
        //
        SocketD.createClusterClient("sd:tcp://127.0.0.1:8602?@=demoapp", 
                                    "sd:tcp://127.0.0.1:8603?@=demoapp", 
                                    "sd:tcp://127.0.0.1:8604?@=demoapp")
                .listen(new EventListener().doOn("hello", (s, m) -> {
                    System.out.println(m);
                }))
                .open();
    }
}
```




### 2、给另一个玩家发消息

* 使用实体的 at 函数，指定消息接收人（其它用法都没变）。没错，就是在模拟这种社交的感觉：

```java
public class Demo {
    public static void main(String[] args) throws Exception {
        
        ClientSession session = SocketD.createClusterClient("sd:tcp://127.0.0.1:8602?@=demoapp")
                .listen(new EventListener().doOn("hello", (s, m) -> {
                    System.out.println(m);
                }))
                .open();
        
        //使用实体的 at ，指定消息接收人
        session.send("test", new StringEntity("hello").at("userapp"))
    }
}
```

* 三种 at 模式（单播，组播，广播）：


| at                 | 描述       |         备注 |
| ----------- | ------ | -------- |
| `demoapp`      | 单播     | 给叫这个名的其中一个会话发（使用平均询论负载均衡策略）     |
| `demoapp*`     | 组播     | 给叫这个名的所有会话发（如果自己也叫这个名，则自己除外）     |
| `*`                  | 广播     | 给集群里的全部会话发（自己除外）     |

* 示例：

```java
session.send("test", new StringEntity("hello").at("userapp"));
session.send("test", new StringEntity("hello").at("userapp*"));
session.send("test", new StringEntity("hello").at("*"));
```

