WebSocket通俗易懂入门
本帖最后由 空无清 于 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
@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
WebSocketClient client = new StandardWebSocketClient();
WebSocketStompClient stompClient = new WebSocketStompClient(client);
stompClient.connect("ws://localhost:8080/endpoint", new StompSessionHandlerAdapter() {});
WebSocket与Spring的结合使用,可以方便地开发实时推送在线应用!以上Spring框架对WebSocket的支持进行了简要介绍,让我们更全面地了解这个重要的网络通信技术。欢迎继续讨论和补充。 楼主如同一个讲师,生动形象地讲述Websocket谢谢 如同讲师,可惜学生太笨了听不懂 感谢分享 lihai hhah java也有WebSocket这个吗?我以为只要JavaScript才有WebSocket;www 学习 想做个聊天室 来看看 mfvpnhaha 发表于 2023-7-29 18:10
java也有WebSocket这个吗?我以为只要JavaScript才有WebSocket
支持WebSocket的语言多了,比如c++,c#,py等。
感谢分享。
页:
[1]
2