近期在做一个物联网项目,需要实现页面的实时更新,这里考虑到用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);
}