在线聊天室如何搭建,websocket的理解运用

发布时间 2023-12-04 00:01:40作者: 糖子哥

这个配置类是用来获取WebSocket连接的握手请求中的HTTP会话对象,并将其保存起来,以便在后续的处理过程中使用。

在WebSocket连接握手时,客户端会发送一个HTTP请求,服务器需要对这个请求进行处理并升级为WebSocket连接。GetHttpSessionConfig类继承了ServerEndpointConfig.Configurator,它重写了modifyHandshake()方法。

modifyHandshake()方法在握手过程中被调用,它接收三个参数:ServerEndpointConfig表示WebSocket端点的配置信息,HandshakeRequest表示握手请求对象,HandshakeResponse表示握手响应对象。

GetHttpSessionConfigmodifyHandshake()方法中,首先通过request.getHttpSession()方法获取到HTTP会话对象(HttpSession),然后将其保存到sec.getUserProperties()中,使用HttpSession.class.getName()作为键。这样,在后续的处理过程中,就可以通过config.getUserProperties().get(HttpSession.class.getName())来获取到该会话对象。

通过获取到HTTP会话对象,可以实现WebSocket和HTTP会话的关联,使得在WebSocket连接中可以访问和共享与该会话相关的数据和状态。

 

 然后这个配置类的话,springboot就会自动扫描bean,并配置好使用websocket应有的一切

 

 这边是工具类,里面有一个方法是getMessage,用来接收消息的,然后里面有一个类叫做ResultMessage,用来表示处理完的消息,为方便理解getMessage,我展示一下这个类的长相如下图

 

 这个ResultMessage它有三个属性,是否为系统消息,谁发送的,还有消息本身,它是在pojo类里头,怎么说,因为以我目前的理解,它应该是不用跟数据库产生关系而交互,它更像是一个中间商?作为一个运行功能的媒介,所以在pojo类里,然后言归正传,继续康康getMessage()方法,他就是把属性暂存到ResultMessage中,存进去了就成为了一个整体,之后整个拿出来用就方便

 

 

 这两个类也放在一起讲上面那张图是一个控制类,第一个接口,登录接口,传入两个参数(@RequestBody User user, HttpSession session),第一个User是前端发给你的,第二给session是自动生成的,用来储存用户信息,每个用户都有自己专属的session,然后他登录是用了个Result类懂得都懂Result干嘛的,就是用来按照特定的格式,返回一些结果的,这个接口,就是用户登录上去之后,给你在flag里面存储是否登录,然后把用户信息存储在session中,比如上面他就在session的session.setAttribute("user",user.getUsername());使用这个方法,建立了一个叫做"user"的字段,然后把用户名装进去,再看第二个接口,就是为了测试有没有成功装进去,调用了session.getAttribute("user")取出里面存储的用户名

 

 然后又建立了一个Message类,来存储消息是谁发的,以及消息内容