首先来解释一下websocket,websocket是全双工通信的协议,我们知道已有的http协议是一种只能由客户端发起请求的协议,如果我们想要让服务器端向客户端主动发送信息或者实时数据更新,用http协议的话比较麻烦。简略介绍一下用http协议实现
第一种:轮询,顾名思义在客户端设置一个固定时间间隔,比如每过五秒向服务器发送一次请求,不管数据有没有变化,服务器接收到请求后立刻处理将结果返回给客户端,导致频繁次数访问服务器,占用大量带宽和服务器内存,并且这种有一定延迟性
第二种:长轮询,是从客户端发起请求,如果服务器暂无更新数据,那么便将这个请求暂时挂起,等到有数据变化的时候再处理将结果返回给客户端。这种方式解决了轮询的延迟性,但是由于请求挂起,也会消耗过多服务器内存、
下面来介绍一下websocket,webscoket通过由客户端向服务器端发送socket请求,客户端和服务器端通过握手之后建立连接,之后服务器就可以向客户端主动推送信息了
在一般的springbootweb项目中,我们在接口中有两种方式来使用websocket,tomcat服务器自带websocket,我这里介绍的是springboot集成的websocket,我额外使用了websocket的拦截器。
第一步:引入websocket依赖
<!--使用websocket实现消息推送-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<!-- web项目启动依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
第二步:配置websocketHandler
import com.liyang.entity.Admin;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.web.socket.*;
import java.io.IOException;
import java.util.ArrayList;
@Service
public class WebSocketServiceImpl implements WebSocketHandler {
private static final Logger log;
//在线管理员信息组
private static final ArrayList<WebSocketSession> admins;
static {
admins &#