空无清 发表于 2023-7-29 15:22

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的支持进行了简要介绍,让我们更全面地了解这个重要的网络通信技术。欢迎继续讨论和补充。

梁茵 发表于 2023-7-29 15:39

楼主如同一个讲师,生动形象地讲述Websocket谢谢

一只大菜猫 发表于 2023-7-29 16:09

如同讲师,可惜学生太笨了听不懂

wt36625633 发表于 2023-7-29 17:00

感谢分享

PJKloveC 发表于 2023-7-29 17:34

lihai hhah

mfvpnhaha 发表于 2023-7-29 18:10

java也有WebSocket这个吗?我以为只要JavaScript才有WebSocket;www

xiatongxue 发表于 2023-7-29 18:58

学习 想做个聊天室 来看看

apull 发表于 2023-7-29 19:08

mfvpnhaha 发表于 2023-7-29 18:10
java也有WebSocket这个吗?我以为只要JavaScript才有WebSocket

支持WebSocket的语言多了,比如c++,c#,py等。

xyzy123 发表于 2023-7-29 20:39


感谢分享。

moruye 发表于 2023-7-29 21:15

页: [1] 2
查看完整版本: WebSocket通俗易懂入门