开始启动 Broker 服务
其实就是启动一个 Socket.D 的 Server ,关键点是使用了 "BrokerListener" 监听器。它的功能,相当于提供了一个社交场所(比如聊天群),让玩家进来,并为不同的玩家转发消息。
另外,分片处理器还使用了 “BrokerFragmentHandler”。收到数据时,不聚合并直接转发。
1、启动 Broker 服务
这非常的简单,也可以自己按需定制 BrokerListener。
public class Demo {
public static void main(String[] args) throws Exception {
SocketD.createServer("sd:tcp")
.config(c -> c.port(8602).fragmentHandler(new BrokerFragmentHandler()))
.listen(new BrokerListener())
.start();
}
}
如果有需要,再启动多个 Broker 服务。
public class Demo {
public static void main(String[] args) throws Exception {
//是否复用,按需决定
BrokerListener brokerListener = new BrokerListener();
SocketD.createServer("sd:tcp")
.config(c -> c.port(8603).fragmentHandler(new BrokerFragmentHandler()))
.listen(brokerListener)
.start();
//这只是示例哦
SocketD.createServer("sd:ws")
.config(c -> c.port(8604).fragmentHandler(new BrokerFragmentHandler()))
.listen(brokerListener)
.start();
}
}
2、启动 Broker 定制服务(如果我们需要定制的话?)
Broker 的逻辑处理都在监听器身上。所以,定制即是对监听器的定制(即对 BrokerListener 的扩展,或者实现类似的 Listener)。 比如我们基于 BrokerListener 加个签权处理,不想让任务客户端都能连。
//做了一个简单的鉴权处理
public class BrokerListenerEx extends BrokerListener {
@Override
public void onOpen(Session session) throws IOException {
if("demo".equals(session.param("token")) == false){
session.close();
return;
}
//注意父类事件要保留
super.onOpen(session);
}
}
//启动时,使用新的监听器
public class Demo {
public static void main(String[] args) throws Exception {
SocketD.createServer("sd:tcp")
.config(c -> c.port(8602).fragmentHandler(new BrokerFragmentHandler()))
.listen(new BrokerListenerEx())
.start();
}
}