近期在做一个物联网项目,需要实现页面的实时更新,这里考虑到用websocket来实现,对于让项目支持websocket这个在springboot中基于spring-boot-starter-websocket来构建是一件很简单的事情,本文就不赘述了。本文主要就建立websocket时如何传参进行说明

背景

当我们的一个web站点,既有普通的http请求也有websocket通道的时候,需要做到会话一致则需要在开发过程中稍加注意,一般是先登录web站点,然后再建立websocket通道,这个时候会产生用户登录token,在websocket通道里面,需要能知道是对应的用户,一般在建立websocket通道的时候将token传入后端,让后端处理即可。

传参的两种方式

在websocket建立时传参都是通过URL体现的,主要是通过path和?+参数形式;

方式一

socket注释

@ServerEndpoint("/websocket/{param}")

方式二

"ws:localhost:8080/websocket/123?username=zhangsan";

后端获取参数方式

调试验证

在这里插入图片描述

编码获取参数

@OnOpen
public void open(Session session, @PathParam("param")String  param) {
    //通过注解@PathParam获取参数
    System.out.println("注解参数: "+param);
    //通过URL获取
    Map<String, String> map = session.getPathParameters();
    System.out.println("getParameter:token="+map.get("token").toString());
    System.out.println("getParameter:token="+map.get("username").toString());
    String username = session.getQueryString();
    System.out.println("session.getQueryString()="+username);
    String uri = session.getRequestURI().toString();
    System.out.println("session.getRequestURI().toString()="+uri);
}

获取结果

在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐