Springboot webSocket(二)

本文将通过搭建一个一对一聊天服务器,深入学习更多的socket知识。

1、发送消息

在前面我们写了一个自动回复的小例子,用到了和两个注解,其实我们还可以使用编程的方式发送消息。

其实很简单,直接引用该消息模板

消息模板内置了一系列方法,比如

这俩方法会包装为消息并将其发送到给定的目的地。

2、STOMP监听

监听webSocket服务器的连接只需要实现ApplicationListener接口。代码如下:

监听的所有状态被封装在一个枚举类中,其实还有很多,这里不再一一列举。

有了上面这些知识,我们就可以基于此开发一对一聊天服务器。

3、Session存取

webSocket提供的是一个socket框架,并不会帮我们管理session,我们需要自己去编写session管理类,进行session的读写。代码如下:

4、监听注册

接着,对STOMP监听类进行扩展。

服务端通过读取到客户端的ID,这个值需要网页客户端手动在header头部信息中设置。

当服务端监听到客户端连接时,会将用户SessionId注册到Map中。

5、监听下线

这里我们使用更可靠的请求下线方式,代码如下:

当收到下线请求时,移除SessionId。

关于Session,也可以设置一个最大值,超时自动移除。

6、一对一消息处理

在一对一服务器中,主要处理的就是一对一的消息发送。大致逻辑是接收客户端消息,分析消息结构,通过SessionMap判断对方是否在线,然后发送相应内容。代码如下:

值得一体的是,关于用户ID的处理,这里使用的是自定义客户端地址,不同的地址表示不同的用户。最后通过convertAndSend()方法发送,这种方式比较可靠方便。

Message.java

7、聊天网页

服务端使用FreeMarker模板引擎返回html网页,代码如下:

通过RESTful形式的URl注册ID。

chat.html

chat.js

网页客户端的主要逻辑在chat.js中。非常有必要的是在stompClient.connect()方法的第一个参数中传入header头信息,该头部信息必须设置id字段的值,因为服务端会读取该ID值,该值最终会取自URL中的参数。

其次是在用户断开链接前,会向服务端发送断开通知。

8、程序演示

打开两个网页,URl分别为和,点击连接。

查看控制台输出:

接下来演示用户101向用户100发送消息:

查看用户100收到信息:

再次查看控制输出:

消息成功发送!

当用户断开链接时,控制台输出为:

关注后端技术精选,每天推送优质好文

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181120B0DCFF00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券