吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1214|回复: 15
收起左侧

[学习记录] WebSocket通俗易懂入门

  [复制链接]
空无清 发表于 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的支持进行了简要介绍,让我们更全面地了解这个重要的网络通信技术。欢迎继续讨论和补充。

免费评分

参与人数 3吾爱币 +2 热心值 +2 收起 理由
tianyu925 + 1 用心讨论,共获提升!
192425 + 1 谢谢@Thanks!
嘚瑟挨顿揍 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

梁茵 发表于 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
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
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 20:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表