| 内置监听器            |                              |                  |
|------------------|------------------------------|------------------|
| SimpleListener   | 简单监听器                        | Listener 的空实现    |
| PipelineListener | 管道监听器                        | Listener 的链式组织实现 |
| EventListener    | 事件监听器，根据消息事件路由（message::event） | 相当于消息的路由器        |


### 1、SimpleListener（简单监听器）

就是一个空实现，上面已经有大量的使用示例。下面的都是链式写法，有些小伙伴可能不喜欢。


### 2、 EventListener（事件监听器，根据消息事件路由）

它相当于是事件（event）的路由器。可以直接在上面配置事件监听，也可以通过它做分发处理。

```javascript
const session = await SocketD.createClient("sd:ws://127.0.0.1:8602/?token=1b0VsGusEkddgr3d")
      .listen(SocketD.newEventListener().doOnMessage((s,m) => {
          //所有消息会先经过 doOnMessage
          console.info(m);
          s.send("/demo", new StringEntity("Me too!"));
      }).doOn("/order", (s,m) => { 
          //根据消息事件路由
          console.info(m); //在 onMessage 时已打印一次，这算第二次打印
      }).doOn("/user", (s,m) => { 
          //根据消息事件路由
          console.info(m); //在 onMessage 时已打印一次，这算第二次打印
      }))
      .open();
```

### 3、 PipelineListener（管道监听器）

在前端，一般用不到它

```javascript
const session = await SocketD.createClient("sd:ws://127.0.0.1:8602/?token=1b0VsGusEkddgr3d")
      .listen(SocketD.newPipelineListener().next(SocketD.newEventListener().doOnMessage((s, m) => {
          //这里可以做拦截
          console.info("拦截打印::" + m);
      })).next(new EventListener().doOnMessage((s, m) => {
          //这里可以做业务处理
          console.info(m);
      })))
      .open();
```

