当前位置: 首页 > news >正文

WebSocket协议

WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接, 并进行双向数据传输

HTTP协议和WebSocket协议对比:

  • HTTP是短连接
  • WebSocket是长连接
  • HTTP通信是单向的,基于请求响应模式
  • WebSocket支持双向通信
  • HTTP和WebSocket底层都是TCP连接

WebSocket应用场景:

  • 视频弹幕
  • 网页聊天
  • 体育实况更新
  • 股票基金报价实时更新

websocket详解

1、使用websocket.html页面作为WebSocket客户端

2、maven坐标

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

3、定义WebSocket服务端组件

// 用于和客户端通信
@Component
@ServerEndpoint("/ws/{sid}")
public class WebSocketServer {private static Map<String, Session> sessionMap = new HashMap<>();/*** 连接建立成功调用的方法*/@OnOpenpublic void onOpen(Session session, @PathParam("sid") String sid){System.out.println("客户端"+sid+"建立连接");sessionMap.put(sid,session);}/** 收到客户端消息后调用的方法* message 客户端发送过来的消息*/@OnMessagepublic void onMessage(String message,@PathParam("") String sid){System.out.println("收到客户端"+sid+"的消息"+message);}/*** 关闭连接* @param sid*/@OnClosepublic void onClose(@PathParam("") String sid){System.out.println("连接断开"+sid);sessionMap.remove(sid);}public void sendToAllClient(String message){Collection<Session> sessions = sessionMap.values();for (Session session:sessions){try {//服务器向客户端发送消息session.getBasicRemote().sendText(message);}catch (Exception e){e.printStackTrace();}}}

4、配置类

/*** WebSocket配置类,用于注册WebSocket的Bean*/
@Configuration
public class WebSocketConfiguration {@Beanpublic ServerEndpointExporter serverEndpointExporter(){return new ServerEndpointExporter();}
}

5、定时任务:定时向客户端推送数据

@Component
public class WebSocketTask {@Autowiredprivate WebSocketServer webSocketServer;/*** 通过WebSocket每隔5秒向客户端发送消息*/@Scheduled(cron = "0/5 * * * * ?")public void sendMessageToClient() {webSocketServer.sendToAllClient("这是来自服务端的消息:" + DateTimeFormatter.ofPattern("HH:mm:ss").format(LocalDateTime.now()));}
}
http://www.lryc.cn/news/148975.html

相关文章:

  • Spring 事务是什么 ?事务的传播机制?
  • 黑马最新MybatisPlus教程!帮你实现快速开发
  • 秒杀场景下用乐观锁解决超卖问题
  • 技术实践|Hive数据迁移干货分享
  • The remote endpoint was in state [TEXT_FULL_WRITING]
  • 微信小程序ios下,border显示不全兼容问题解决
  • 《Effective C++中文版,第三版》读书笔记6
  • 【Docker 】Docker 客户端,容器使用,启动容器,启动已停止运行的容器,停止一个容器,进入容器
  • CTFshow 菜狗杯 web方向 全
  • 深入理解sql:进阶版
  • day31 | 455.分发饼干、376. 摆动序列、53. 最大子序和
  • C# textBox 右键菜单 contextMenuStrip
  • TCP拥塞控制详解 | 7. 超越TCP
  • stm32之26.spi外设
  • C++信息学奥赛1177:奇数单增序列
  • Java的数组是啥?
  • 我的私人笔记(安装hadoop)
  • 【板栗糖GIS】——360浏览器的下载图标隐藏在内部不方便,怎么修改
  • SpringMVC之文件上传和下载
  • 简单了解OSI网络模型
  • 服务网格实施周期缩短 50%,丽迅物流基于阿里云 ACK 和 ASM 的云原生应用管理实践
  • bpmnjs Properties-panel拓展(属性设置篇)
  • Debian系统上通过NFS挂载远程服务器硬盘
  • 【Linux】以太网协议以及MTU
  • UE5打完包后,启动程序不能全屏
  • 财务部发布《企业数据资源相关会计处理暂行规定》
  • 引用(个人学习笔记黑马学习)
  • 卷积神经网络实现运动鞋识别 - P5
  • C#安装“Windows 窗体应用(.NET Framework)”
  • SQL高阶语句