Solon Web 开发,十三、WebSocket

开发 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);
    }
}
posted @ 2022-01-19 08:20  带刺的坐椅  阅读(218)  评论(0编辑  收藏  举报