然后加入 Broker 集群,参与会话
1、加入 Broker 集群(就像进入社交群)
需要使用 url 的 @
参数,给自己取个名字。当然,不加入集群也可以通过 @
参数给自己取名。不取名行不行?免强也行,做为游客。只能主动给有名字的玩家发消息,别人没办法给你发。
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 服务?可以使用集群客户端:
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 函数,指定消息接收人(其它用法都没变)。没错,就是在模拟这种社交的感觉:
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* | 组播 | 给叫这个名的所有会话发(如果自己也叫这个名,则自己除外) |
* | 广播 | 给集群里的全部会话发(自己除外) |
- 示例:
session.send("test", new StringEntity("hello").at("userapp"));
session.send("test", new StringEntity("hello").at("userapp*"));
session.send("test", new StringEntity("hello").at("*"));