WebSocket 是基于TCP的一种新的网络协议,它实现了浏览器与服务器的全双工通信
浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输
http 协议 和web Socket 协议的对比
http 是短链接
websocket 是长连接
http 通信时单向的,基于请求相响应式
websocket 支持双向通信
HTTP 和 websocket 底层都是基于TCP 连接
websocket 缺点:
服务器长期维护长连接需要一定的成本
各个浏览器支持成都一笔
websocket 是长连接,受网络限制比较大,需要处理好重连
ps : websocket 并不能完全取代 HTTP ,他只是和在特定的场景下使用
常用场景:
视频弹幕
网页聊天
网页实况更新
实现步骤:
导入依赖:spring-boot-starter-websocket
编写一个组件类,并且实现三个方法,方法的形参须接收每次触发方法的会话SID(@PathParam("sid") String sid)
方法分别给上注解
@OnOpen(连接时触发的方法),
@OnOpen
public void open(@PathParam("sid") String sid){
System.out.println("客户端:"+sid+" 连接成功");
}
@OnMessage(接收到消息时触发的方法),
@OnMessage
public void message(@PathParam("sid") String sid,String message){
System.out.println("客户端发消息:"+message);
}
@OnClose(断开连接时触发的方法)
@OnClose
public void close(@PathParam("sid") String sid){
System.out.println("客户端退出了");
}
在类上面给上注解 @Component(表示该类是组件类)、@ServerEndPoint("/ws/{sid}"):这是关键注解,括号里的是前端页面的请求请求路径
3. 编写一个配置类,声明一个创建 bean 的方法,
@Bean
public ServerEndPointExporter serverEndPointExporter(){
return new ServerEndPointExporter();
}
4. 创建启动类