WebSocket介绍和入门案例

server/2024/10/22 2:19:55/

目录

  • 一、WebSocket 详解
    • 1. 定义与特点:
    • 2. 工作原理:
    • 3. 应用场景:
  • 二、入门案例

一、WebSocket 详解

1. 定义与特点:

  • WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它允许客户端和服务器之间进行实时、双向的数据传输,克服了传统 HTTP 协议只能由客户端发起请求、服务器响应的单向通信模式的局限性。
  • 特点包括低延迟、实时性强、减少不必要的网络流量和服务器资源消耗等。
  • HTTP协议和WebSocket协议对比:
  • HTTP是短连接
  • WebSocket是长连接
  • HTTP通信是单向的,基于请求响应模式(浏览器发送请求给服务器)
  • WebSocket支持双向通信
  • HTTP和WebSocket底层都是TCP连接

2. 工作原理:

  • 建立连接:客户端向服务器发起 WebSocket 连接请求,该请求通过 HTTP 协议进行握手。如果服务器支持 WebSocket,它会返回一个特殊的 HTTP 响应,通知客户端可以将连接升级为 WebSocket 连接。
  • 数据传输:一旦连接建立,客户端和服务器可以随时双向发送数据。数据以帧的形式进行传输,可以是文本数据或二进制数据。
  • 连接关闭:任何一方都可以发送关闭连接的请求,关闭连接后双方不能再进行数据传输。

**思考**:既然WebSocket支持双向通信,功能看似比HTTP强大,那么我们是不是可以基于WebSocket开发所有的业务功能?

WebSocket缺点

  • 服务器长期维护长连接需要一定的成本
  • 各个浏览器支持程度不一
  • WebSocket 是长连接,网络限制比较大,需要处理好重连

结论:WebSocket并不能完全取代HTTP,它只适合在特定的场景下使用

3. 应用场景:

  • 实时聊天应用:实现用户之间的即时通信,消息实时推送。
  • 在线游戏:同步游戏状态,实时交互。
  • 金融交易平台:实时显示股票价格、交易数据等。
  • 监控系统:实时反馈系统状态、设备运行数据等。
  • 弹幕的实现

二、入门案例

以下是一个使用 Java 和 Spring Boot 实现的简单 WebSocket 入门案例:

  1. 创建一个 Spring Boot 项目,并在项目的依赖管理文件(如 pom.xml)中添加 Spring Boot WebSocket 的依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
  1. 配置 WebSocket:

创建一个配置类,用于配置 WebSocket 端点:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {registry.addHandler(sampleWebSocketHandler(), "/ws").setAllowedOrigins("*");}@Beanpublic SampleWebSocketHandler sampleWebSocketHandler() {return new SampleWebSocketHandler();}
}
  1. 创建 WebSocket 处理类:
import org.springframework.stereotype.Component;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;@Component
public class SampleWebSocketHandler extends TextWebSocketHandler {private List<WebSocketSession> sessions = new ArrayList<>();@Overridepublic void handleTextMessage(WebSocketSession session, TextMessage message) throws IOException {// 当接收到客户端消息时,可以进行处理并向所有连接的客户端广播String payload = message.getPayload();for (WebSocketSession s : sessions) {s.sendMessage(message);}}@Overridepublic void afterConnectionEstablished(WebSocketSession session) throws Exception {// 当连接建立时,将 session 添加到列表中sessions.add(session);}@Overridepublic void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {// 当连接关闭时,从列表中移除 sessionsessions.remove(session);}
}
  1. 在前端页面中使用 WebSocket:
<!DOCTYPE html>
<html><head><script>var socket = new WebSocket("ws://localhost:8080/ws");socket.onmessage = function (event) {console.log(event.data);};function sendMessage() {var message = document.getElementById("messageInput").value;socket.send(message);}</script>
</head><body><input type="text" id="messageInput"><button onclick="sendMessage()">发送消息</button>
</body></html>

http://www.ppmy.cn/server/133772.html

相关文章

Maven--简略

简介 Apache旗下的一款开源项目&#xff0c;用来进行项目构建&#xff0c;帮助开发者管理项目中的jar及jar包之间的依赖&#xff0c;还拥有项目编译、测试、打包的功能。 管理方式 统一建立一个jar仓库&#xff0c;把jar上传至统一的仓库&#xff0c;使用时&#xff0c;配置…

IDEA启动报错,java: OutOfMemoryError: insufficient memory

idea版本&#xff1a;2024.1 解决方法&#xff1a; 调节一下idea的编译参数。 将setting–>Compiler–>Shared build process heap size 的参数调整的大一些&#xff0c;默认是700&#xff0c;可以调整为2048甚至更大&#xff0c;我这边调整为了4096。

MySQL中查询语句的执行流程

文章目录 前言流程图概述最后 前言 你好&#xff0c;我是醉墨居士&#xff0c;今天我们一起探讨一下执行一条查询的SQL语句在MySQL内部都发生了什么&#xff0c;让你对MySQL内部的架构具备一个宏观上的了解 流程图 概述 对于查询语句的SQL的执行流程&#xff0c;主要可以分为…

Axure大屏可视化模板:打造跨领域数据分析平台的原型设计案例

数据可视化已成为各行各业提升管理效率、优化决策过程的重要手段。Axure作为一款强大的原型设计工具&#xff0c;其大屏可视化模板在农业、园区、城市、企业数据可视化、医疗等多个领域得到了广泛应用。本文将通过几个具体案例&#xff0c;展示Axure大屏可视化模板在不同领域中…

即时通讯代码优化

在线用户逻辑修复 在进行测试时&#xff0c;发现当前代码有个问题&#xff0c;如果test1在服务器进行连接&#xff0c;本地的test2给test1发消息&#xff0c;虽然test1能收到服务器上的信息&#xff0c;但是本地服务日志中会报teset1不在线&#xff0c;需要对该种情况进行修复…

efinance库支持哪些类型的金融数据获取?

炒股自动化&#xff1a;申请官方API接口&#xff0c;散户也可以 python炒股自动化&#xff08;0&#xff09;&#xff0c;申请券商API接口 python炒股自动化&#xff08;1&#xff09;&#xff0c;量化交易接口区别 Python炒股自动化&#xff08;2&#xff09;&#xff1a;获取…

「从零开始的 Vue 3 系列」:第十三章——架构一个Vue项目(简单版)

前言 本系列将从零开始&#xff0c;系统性地介绍 Vue 3 的常用 API&#xff0c;逐步深入每个核心概念与功能模块。通过详尽的讲解与实战演示&#xff0c;帮助大家掌握 Vue 3 的基础与进阶知识&#xff0c;最终具备独立搭建完整 Vue 3 项目的能力。 从零开始使用 Vite 和 Vue 3…

Elasticsearch是做什么的?

初识elasticsearch 官方网站&#xff1a;Elasticsearch&#xff1a;官方分布式搜索和分析引擎 | Elastic Elasticsearch是做什么的&#xff1f; Elasticsearch 是一个分布式搜索和分析引擎&#xff0c;专门用于处理大规模数据的实时搜索、分析和存储。它基于 Apache Lucene …