好友
阅读权限 25
听众
最后登录 1970-1-1
空无清
发表于 2023-7-29 15:22
本帖最后由 空无清 于 2023-7-29 15:58 编辑
WebSocket是什么?
WebSocket是一种在单个TCP连接上进行全双工通信的协议。它使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
WebSocket与HTTP区别
相比HTTP请求-应答模式的高开销和高延迟,WebSocket更适合实时应用场景。例如实时性要求较高的游戏,股票交易软件, Collaboration应用等。
WebSocket工作原理
WebSocket连接建立之前,客户端浏览器先通过HTTP请求与服务器协商升级协议。服务器端解析请求中的Upgrade字段,表示客户端希望连接升级为WebSocket。服务器同意协议升级,返回101 Switching Protocols响应。客户端和服务器端进行通信,可以发送文本或二进制数据。所有数据都是原始内容,没有HTTP请求报文的开销。WebSocket定义了几组关键的API:WebSocket对象:用于创建一个WebSocket实例 WebSocket.send():用于向服务端发送数据 WebSocket.onopen:打开连接时触发 WebSocket.onmessage:接收到服务端数据时触发 WebSocket.onclose:连接关闭时触发 WebSocket.onerror:通信发生错误时触发
通过这组API就可以方便地实现基于WebSocket的实时应用!
WebSocket应用场景
WebSocket使得客户端和服务器之间实时数据交换成为可能,适用于如下场景:实时消息推送:聊天,弹幕,地图位置 实时多人游戏 实时系统监控 交互式网页应用 股票、比特币等交易软件
WebSocket启发了我们对实时交互的全新想象,大大推动了Web应用的发展!
接下来讲讲实际应用,就拿java里最受欢迎的spring工程来举例吧。
在Spring中使用WebSocket
Spring Framework也对WebSocket提供了支持,可以便捷地使用WebSocket实现实时推送。
Spring WebSocket API: Spring 提供了以下API用于WebSocket开发:@EnableWebSocket:启用WebSocket支持 WebSocketHandler:核心处理器,处理WebSocket会话、消息 WebSocketSession:封装了WebSocket连接的会话信息 WebSocketMessage:WebSocket会话中的消息对象
实现WebSocket服务端 创建一个WebSocket配置类,添加@EnableWebSocket注解 实现WebSocketHandler接口,定义连接、消息处理逻辑 在配置类中注册WebSocketHandler
[Java] 纯文本查看 复制代码
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new MyHandler(), "/endpoint");
}
}
public class MyHandler extends WebSocketHandler {
@Override
public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) {
// 消息处理逻辑
}
}
实现WebSocket客户端
Spring提供了用于创建WebSocket连接的WebSocketClient
[Java] 纯文本查看 复制代码
WebSocketClient client = new StandardWebSocketClient();
WebSocketStompClient stompClient = new WebSocketStompClient(client);
stompClient.connect("ws://localhost:8080/endpoint", new StompSessionHandlerAdapter() {});
WebSocket与Spring的结合使用,可以方便地开发实时推送在线应用!以上Spring框架对WebSocket的支持进行了简要介绍,让我们更全面地了解这个重要的网络通信技术。欢迎继续讨论和补充。
免费评分
查看全部评分
发帖前要善用【论坛搜索 】 功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。