其实就是启动一个 Socket.D 的 Server ，关键点是使用了 "BrokerListener" 监听器。它的功能，相当于提供了一个社交场所（比如聊天群），让玩家进来，并为不同的玩家转发消息。

另外，分片处理器还使用了 “BrokerFragmentHandler”。收到数据时，不聚合并直接转发。

### 1、启动 Broker 服务

这非常的简单，也可以自己按需定制 BrokerListener。

```java
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 服务。

```java
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 加个签权处理，不想让任务客户端都能连。

```java
//做了一个简单的鉴权处理
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();
    }
}
```