Solon v3.0.3

一、WebSocket 开发 (v2)

</> markdown

此内容 v2.6.0 后支持


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

  • 或者 solon-boot-websocket (端口为:主端口 + 10000)
  • 或者 solon-boot-websocket-netty (端口为:主端口 + 10000)
  • 或者 solon-boot-smarthttp
  • 或者 solon-boot-undertow
  • 或者 solon-boot-jetty + solon-boot-jetty-add-websocket

如果需要修改端口(对独立的 WebSocket 插件有效;否则共享 Http 端口):

server.websocket.port: 18080

1、主接口说明

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

2、启用

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 接口模式
@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,可以略掉不必要的方法
@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);
    }
}