Socket.D v2.5.11

开始启动 Broker 服务

</> markdown

其实就是启动一个 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();
    }
}