websocket技术在服务端实时消息的推送和im聊天系统中得到了广泛应用。作为一名后端研发人员,这其中又有哪些需要了解和注意的问题点呢?接下来,我一一进行阐明。

SpringBoot项目中引入依赖

引入依赖

  <!--websocket支持包-->       <dependency>           <groupId>org.springframework.boot</groupId>           <artifactId>spring-boot-starter-websocket</artifactId>           <version>your spring-boot version</version>       </dependency>

创建websocket服务端

项目中引入websocket依赖后,接下来我们创建websocket服务端。

1.基础版WebSocketServer

@Component
@ServerEndpoint("/xxx")
@Slf4j
public class WebSocketServer {
​   /**    * 连接建立成功调用的方法    *    * @param session 可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据    */   @OnOpen   public void onOpen(Session session, @PathParam("chatId") String chatId, @PathParam("userId") String userId) {
​
​   }
​
​   /**    * 连接关闭调用的方法    */   @OnClose   public void onClose(Session session) {      
​   }
​
​
​   /**    * 收到客户端消息后调用的方法    *    * @param message 客户端发送过来的消息    * @param session 可选的参数    */   @OnMessage   public void onMessage(String message, Session session) {       }
​    
​   /**    * 发生错误时调用    *    * @param session    * @param error    */   @OnError   public void onError(Session session, Throwable error) {          }
​
}

  1. @ServerEndpoint("/xxx") 中的路径为websocket的连接地址,类似于我们项目中定义的controller接口地址。

它用于定义一个WebSocket端点:标记一个Java类作为一个WebSocket的服务器端点,使其能够处理来自客户端的WebSocket连接请求。使用@ServerEndpoint注解时,你可以指定一个路径,通过这个路径客户端可以与服务器建立WebSocket通信。

  1. 无论是websocket客户端还是服务端,创建websocket对象时,都默认提供四个连接管理的基础方法分别是:

    • onOpen() 打开/创建连接

    • onMessage() 接收消息

    • onClose() 连接关闭

    • onError() 出现错误:如消息处理异常

2.完整版webSocketServer

package com.rs.websocket.config;
​
import com.alibaba.fastjson.JSON;
import com.rs.patient.dao.model.PatientChatMessage;
import com.rs.patient.rpc.api.PatientChatMessageService;
import com.rs.patient.rpc.dto.PatientChatMessageDto;
import java.io.IOException;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArraySet;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websoc

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/86018.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/86018.shtml
英文地址,请注明出处:http://en.pswp.cn/web/86018.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学历信息查询API (IVYZ9A2B) 的对接实战 | 天远API

摘要 本文是天远API学历信息查询API&#xff08;接口代码&#xff1a;IVYZ9A2B&#xff09;的深度技术解析文档。作为一名开发者&#xff0c;我将从实际应用场景出发&#xff0c;详细介绍该接口的调用方法、数据结构和最佳实践。无论您是在开发招聘系统、教育管理平台&#xf…

2025年- H84-Lc192--75.颜色分类(技巧、三路指针排序)--Java版

1.题目描述 2.思路 3.代码实现 class Solution {public void sortColors(int[] nums) {int low 0; // 下一个 0 应该放的位置int mid 0; // 当前检查的位置int high nums.length - 1; // 下一个 2 应该放的位置while (mid < high) {if (nums[mid] …

使用markRaw实例化echarts对象

在Vue 3中&#xff0c;markRaw 函数用于标记一个对象&#xff0c;使其永远不会转换为响应式代理。在 this.chart markRaw(echarts.init(chartDom)); 这行代码中&#xff0c;加与不加 markRaw 的主要区别在于Vue是否会将ECharts实例转换为响应式对象。以下是详细分析&#xff1…

硬件-DAY08(中断)

一、蜂鸣器学习&#xff08;中断&#xff09; 二、BSP工程管理 利用BSP工程管理&#xff0c;使文档显示不杂乱&#xff1b; 将这些文件分为4类&#xff0c;并保存到4个不同的文件夹里。 首先在新的工程文件夹里创建一个之后我们编写的类似led驱动&#xff0c;clk驱动等等外设驱…

【Datawhale组队学习202506】YOLO-Master task04 YOLO典型网络模块

系列文章目录 文章目录 系列文章目录前言4.1 DFL 模块4.1.1 DFL的核心思想 4.2 SPP 模块4.2.1 核心思想 4.3 SPPF 模块4.3.1 核心思想 总结 前言 Datawhale是一个专注于AI与数据科学的开源组织&#xff0c;汇集了众多领域院校和知名企业的优秀学习者&#xff0c;聚合了一群有开…

springboot中表是以int为主键id的,写了一个生成不重复id的方法

【初衷】 由于系统改造&#xff0c;之前的单应用改成了分布式应用&#xff0c;但是系统底层在搭建的时候部分关联id定义为了int类型&#xff0c;导致分布式id生成的long类型无法插入到int中&#xff0c;且由于是多系统部署&#xff0c;为了把损失降到最低&#xff0c;故此决定…

天气查询API集成指南

天气查询API集成指南 引言 在互联网和移动应用快速发展的今天&#xff0c;天气查询API已经成为开发人员构建各种应用程序时不可或缺的工具之一。无论是为用户提供日常出行建议、帮助农民规划农作时间&#xff0c;还是支持物流行业优化配送路线&#xff0c;实时且准确的天气信息…

AI 产品部署和交付的基础设施——全景解析

当然可以&#xff01;以下是对“AI产品部署和交付的基础设施”主题的详细内容扩展&#xff0c;适合介绍给同事&#xff0c;帮助大家系统性理解AI落地的全流程和关键要素。 AI产品部署和交付的基础设施——全景解析 各位同事&#xff0c;随着AI技术的飞速发展&#xff0c;AI产品…

Linux C 目录基本操作

需要引用的头文件 #include <unistd.h> unistd.h 为程序提供了对POSIX操作系统API的访问接口&#xff0c;主要用于提供与系统调用相关的功能。 char *getcwd(char *buf, size_t size); 用于获取当前工作目录&#xff08;Current Working Directory&#xff09;的绝对…

关于二分和分治的详细讲解(从属于GESP五级)

本章内容 二分 分治 当你把疑惑一劈为二&#xff0c;困境就只剩下一半。 一、二分查找 1. 何谓“二分”&#xff1f; “二分”本质是一种 对单调现象反复折半 的搜索思想。 单调现象&#xff1a;随变量增大&#xff0c;目标状态只会保持“假→真”或“真→假”一次性跃迁…

程序猿成长之路之数据挖掘篇——聚类算法介绍

作为无监督学习算法的基础&#xff0c;学好聚类算法很关键&#xff0c;我之前介绍过kmeans聚类算法&#xff0c;现在系统的介绍一下聚类算法 1. 什么是分类 日常生活中我们会经常见到分类的情况&#xff0c;如家里大扫除时给物品归类&#xff0c;超市货架上商品分类等。分类就…

PostgreSQL 性能优化与集群部署:PGCE 认证培训实战指南

&#xff5c;深夜被数据库报警惊醒&#xff1f; &#xff5c;海量数据查询卡死业务&#xff1f; &#xff5c;主库宕机导致服务中断&#xff1f; 如果你正被这些PostgreSQL生产难题困扰&#xff0c;是时候系统掌握数据库内核优化与高可用架构了&#xff01;深度求索联合PG分会…

Java 对象映射 数据库表映射 工具类 两个对象/表实现映射转换

场景&#xff1a;需要将一个对象的各个字段中的数据映射到另一个对象的字段数据中&#xff0c;或将一个数据库表映射到另一张表中。 本文使用泛型编程实现了一个对象映射功能的工具类。 需要源对象&#xff0c;映射关系map&#xff0c;目标类。由于是动态的类&#xff0c;所以…

Linux离线搭建Jenkins

Linux离线搭建Jenkins(centos7) Jenkins简介: Jenkins只是一个平台&#xff0c;真正运作的都是插件。这就是jenkins流行的原因&#xff0c;因为jenkins什么插件都有&#xff0c;Hudson是Jenkins的前身&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控程序重…

从零学习linux(2)——管理

一.用户管理 1.用户属性 用户名、口令、用户ID&#xff08;UID&#xff09;、用户主目录&#xff08;HOME&#xff09;、用户shell 2. 3. 4.adduser添加用户 语法&#xff1a;adduser 用户名 如# adduser superw 添加用户名为superw的新用户 5.deluser删除用户 语法&am…

《贵州棒垒球》有什么国家级比赛·棒球1号位

中国国家级棒球比赛盘点 | 小白入门指南 3月 | 中国棒球联赛 (China Baseball League) 国内最高水平职业联赛&#xff0c;各省市职业队角逐冠军&#xff01; 英文&#xff1a;Top-tier professional event with teams nationwide. 5月 | 全国青年棒球锦标赛 (National Youth …

该项目名为“EduPal“,AI推荐

## 完整代码实现 ### 后端代码 (app.py) python import os import json import uuid import requests from datetime import datetime from flask import Flask, render_template, request, jsonify from dotenv import load_dotenv # 加载环境变量 load_dotenv() app …

C++法则15:匹配失败并不是一种错误(Substitution Failure Is Not An Error)。

C法则15&#xff1a;匹配失败并不是一种错误(Substitution Failure Is Not An Error)。 应用例子&#xff1a; SFINAE &#xff1a;关于is_class&#xff0c;is_base_of&#xff0c;C编译器的魔法器&#xff0c;如何实现&#xff0c;is_class&#xff0c;is_base_of。_c is cl…

Ollama客户端 + Docker搭建本地知识库(Mac系统)

一、环境准备 1. 安装Ollama客户端 官网下载&#xff1a;https://ollama.com 验证安装&#xff1a; ollama --version2. 安装Docker Desktop 下载地址&#xff1a;https://www.docker.com/products/docker-desktop 安装后确保Docker状态为"Running" 二、基础搭建…

FastMCP 2.9 版本详解:MCP 原生中间件与类型转换增强

下面我将从三个方面来讲解这个&#xff0c;第一是讲解2.9版本的更新&#xff0c;第二是讲解什么将手动解析底层JSON-RPC 消息&#xff0c;丢失 FastMCP 高层语义&#xff0c;第三是讲一讲&#xff0c;什么叫做中间件。不了解的兄弟们系好安全带&#xff0c;我们准备发车了&…