此内容 v2.6.0 后支持

---

开发 WebSocket 服务端，需要引入相关的信号启动插件：

* 或者 solon-server-websocket (端口为：主端口 + 10000)
* 或者 solon-server-websocket-netty (端口为：主端口 + 10000)
* 或者 solon-server-smarthttp
* 或者 solon-server-undertow
* 或者 solon-server-jetty + solon-server-jetty-add-websocket


如果需要修改端口（对独立的 WebSocket 插件有效；否则共享 Http 端口）：

```yml
server.websocket.port: 18080
```

### 1、主接口说明



| 接口 | 说明 | 补充 |
| -------- | -------- | -------- |
| WebSocket     | 会话接口     |      |
|      |      |      |
| WebSocketListener     | 监听器接口     | 其它监听器，都是它的实现     |



### 2、启用

```java
public class DemoApp {
    public static void main(String[] args) {
        Solon.start(DemoApp.class, args, app->{
            //启用 WebSocket 服务
            app.enableWebSocket(true);
        });
    }
}
```


### 3、监听示例

以地址 `ws://localhost:18080/ws/demo/12?token=xxx`  为例：

* 标准 WebSocketListener 接口模式

```java
@ServerEndpoint("/ws/demo/{id}")
public class WebSocketDemo implements WebSocketListener {

    @Override
    public void onOpen(WebSocket socket) {
        //path var
        String id = socket.param("id");
        //query var
        String token = socket.param("token");

        if(("admin".equals(id) && "1234".equals(token)) == false){
            socket.close();
        }

        /*此处可以做签权；会话的二次组织等...*/
    }

    @Override
    public void onMessage(WebSocket socket, String text) throws IOException {
        socket.send("我收到了：" + text);
    }

    @Override
    public void onMessage(WebSocket socket, ByteBuffer binary) throws IOException {

    }

    @Override
    public void onClose(WebSocket socket) {

    }

    @Override
    public void onError(WebSocket socket, Throwable error) {

    }
}
```


* 使用 SimpleWebSocketListener，可以略掉不必要的方法


```java
@ServerEndpoint("/ws/demo/{id}")
public class WebSocketDemo extends SimpleWebSocketListener {
    @Override
    public void onOpen(WebSocket socket) {
        //path var
        String id = socket.param("id");
        //query var
        String token = socket.param("token");

        if(("admin".equals(id) && "1234".equals(token)) == false){
            socket.close();
        }

        /*此处可以做签权；会话的二次组织等...*/
    }

    @Override
    public void onMessage(WebSocket socket, String text) throws IOException {
        socket.send("我收到了：" + text);
    }
}
```








