基于 Netty 搭建高性能 WebSocket 服务器

【springcloud环境下基于Netty搭建websocket实现消息推送】 这样存在的缺点就是,一方面如果后端数据木有更新,那么这一次http请求就是无用的,另一方面高并发情况下,短链接的频繁创建销毁,以及客户端数量过大造成过多无用的http请求,都会对服务器和带宽造成压力,短轮询只适用于客户端连接少,并发量不高的场景;③buffer缓冲区:Buffer本质上是一个可以读写的内存块,可以理解成容器对象,底层是有一个数组,通过buffer实现非阻塞机制,该对象提供了一组方法,可以轻松的使用内存块,缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况。 阅读详情

基于 Netty 搭建高性能 WebSocket 服务器

本项目基于 Netty 搭建高性能 WebSocket 服务器,结合 Spring Boot 与 Thymeleaf 模板引擎,构建一个简洁的网页版实时聊天室。通过本文档,你可以快速了解项目结构、核心组件实现以及启动方式。


在这里插入图片描述

1. 项目概述

项目名称:Netty-Chat-SpringBoot
项目描述:基于 Netty 的 WebSocket 网页版聊天室
技术栈:

  • Spring Boot:提供后端依赖注入、Web 层支持以及整体项目骨架
  • Netty:构建高性能、事件驱动的 WebSocket 服务器
  • Thymeleaf:服务端模板引擎,渲染聊天页面
  • WebSocket:实现浏览器与服务器之间的全双工实时通信

选择 Netty 而非 Tomcat 自带的 WebSocket 实现,是因为 Netty 在高并发连接、内存管理以及协议扩展上表现更优,非常适合实时通信场景。


2. 项目结构

src/
├── main/
│   ├── java/com/weh/
│   │   ├── NettyChatSpringBootApplication.java    # 启动类
│   │   ├── controller/
│   │   │   └── ChatController.java               # 控制器(处理HTTP请求,返回页面)
│   │   ├── netty/
│   │   │   ├── NettyWebSocketServer.java        # Netty WebSocket 服务器
│   │   │   ├── WebSocketChannelInit.java        # 通道初始化器(配置pipeline)
│   │   │   └── WebSocketServerHandler.java      # 消息处理器(收发消息、连接事件)
│   │   └── properties/
│   │       └── NettyProperties.java             # Netty 配置属性类
│   └── resources/
│       ├── application.yml                      # 主配置文件
│       ├── static/                              # 静态资源(CSS/JS/图片)
│       └── templates/                           # Thymeleaf 模板(聊天页面)

整个项目遵循 Spring Boot 的标准分包,netty 包下集中管理 WebSocket 服务器相关逻辑,properties 包负责将 YAML 配置映射为 Java 对象。


3. 核心功能与实现

依赖:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--整合模板引擎 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.68.Final</version>
        </dependency>
    </dependencies>

3.1 配置文件 application.yml

server:
  port: 8080

netty:
  port: 8081
  path: /chat

resources:
  static-locations:
    - classpath:/static/

spring:
  thymeleaf:
    cache: false
    check-template-location: true
    enabled: true
    encoding: UTF-8
    mode: HTML5
    prefix: classpath:/templates/
    suffix: .html
  • server.port:Spring Boot 内嵌 Tomcat 的端口,用于访问 Thymeleaf 页面。
  • netty.port / netty.path:Netty WebSocket 服务器监听的端口和路径,客户端通过 ws://localhost:8081/chat 连接。
  • spring.thymeleaf:开启 Thymeleaf 并关闭缓存,方便开发调试。

3.2 主要组件说明

组件说明
NettyWebSocketServer实现 Runnable,在独立线程中启动 Netty 服务,监听配置的端口
WebSocketChannelInit继承 ChannelInitializer,向 ChannelPipeline 中添加 HTTP 编解码器、WebSocket 协议处理器及自定义业务 handler
WebSocketServerHandler核心业务处理器,重写 channelRead 接收消息,重写 handlerAdded / handlerRemoved 管理连接
NettyProperties使用 @ConfigurationProperties(prefix = "netty") 将 port 与 path 注入 Spring 容器
配置属性类示例
@Data
@Component
@ConfigurationProperties(prefix = "netty")
public class NettyProperties {
    private int port;
    private String path;
}
通道初始化器
public class WebSocketChannelInit extends ChannelInitializer<SocketChannel> {
		@Autowired
	  private NettyProperties nettyProperties;
	  	@Autowired
	  private WebSocketServerHandler webSocketServerHandler;
    @Override
    protected void initChannel(SocketChannel ch) {
        ChannelPipeline pipeline = ch.pipeline();
        // HTTP 编解码器
        pipeline.addLast(new HttpServerCodec());
         // 支持大数据流
        pipeline.addLast(new ChunkedWriteHandler()); // 块写处理器, 用于大数据的分区传输
        // 聚合 HTTP 消息为 FullHttpRequest
        pipeline.addLast(new HttpObjectAggregator(65536));
        // WebSocket 协议处理器
        pipeline.addLast(new WebSocketServerProtocolHandler(nettyProperties.path));
        // 自定义业务处理器
        pipeline.addLast(webSocketServerHandler);
    }
}
消息处理器

WebSocketServerHandler 继承 SimpleChannelInboundHandler<TextWebSocketFrame>,简化文本消息处理:

@Component
@ChannelHandler.Sharable // 设置通道共享
public class WebSocketServerHandler extends SimpleChannelInboundHandler<TextWebSocketFrame> {

    // 保存所有已连接的通道
    private static final ChannelGroup channels = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);

    @Override
    public void handlerAdded(ChannelHandlerContext ctx) {
        channels.add(ctx.channel());
        // 广播新用户加入
    }

    @Override
    protected void channelRead0(ChannelHandlerContext ctx, TextWebSocketFrame msg) {
    	String msg = textWebSocketFrame.text();
        System.out.println("收到的消息:"+msg);
			
        Channel currentChannel = ctx.channel();
        // 读取客户端消息并广播给所有通道,除了自己
        channels.forEach(channel -> {
            if (channel != currentChannel) {
                channel.writeAndFlush(new TextWebSocketFrame(msg));
            }
        });
    }

    @Override
    public void handlerRemoved(ChannelHandlerContext ctx) {
        channels.remove(ctx.channel());
        // 广播用户离开
    }
    
    // 异常处理
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        cause.printStackTrace();
        channels.remove(ctx.channel());
    }
}

通过 ChannelGroup 统一管理所有连接,实现消息广播,构建公共聊天室。


Netty WebSocket 服务器
package com.weh.netty;

import com.weh.properties.NettyProperties;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.logging.LogLevel;
import io.netty.handler.logging.LoggingHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PreDestroy;

/**
 * @author weh
 * @version 1.0
 * @description: netty服务器
 * @date 2026/5/16 20:06
 */
@Component
public class NettyWebSocketServer implements Runnable{

    @Autowired
    private NettyProperties nettyProperties;
    @Autowired
    private WebSocketChannelInit webSocketChannelInit;
    private EventLoopGroup bossGroup = new NioEventLoopGroup(1);
    private EventLoopGroup workGroup = new NioEventLoopGroup();

    @PreDestroy
    private void close() {
        bossGroup.shutdownGracefully();
        workGroup.shutdownGracefully();
    }

    @Override
    public void run() {
        try {
        		//创建启动助手
            ServerBootstrap serverBootstrap = new ServerBootstrap();
            serverBootstrap.group(bossGroup, workGroup) // 绑定两个线程组
                    .channel(NioServerSocketChannel.class)
                    .handler(new LoggingHandler(LogLevel.DEBUG)) // 日志处理器
                    .childHandler(webSocketChannelInit); // 创建一个通道初始化对象,添加自定义处理器
            // 绑定端口,等待成功
            ChannelFuture future = serverBootstrap.bind(nettyProperties.getPort()).sync();
            System.out.println("Netty服务器启动成功");
            System.out.println("Netty服务器端口:" + nettyProperties.toString());
            future.channel().closeFuture().sync(); // 监听关闭通道
        } catch (InterruptedException e) {
            e.printStackTrace();
            bossGroup.shutdownGracefully();
            workGroup.shutdownGracefully();
        }finally {
            bossGroup.shutdownGracefully();
            workGroup.shutdownGracefully();
        }
    }
}

4. 启动流程与说明

4.1 启动类设计

@SpringBootApplication
public class NettyChatSpringBootApplication implements CommandLineRunner {

    @Autowired
    private NettyWebSocketServer nettyWebSocketServer;

    public static void main(String[] args) {
        SpringApplication.run(NettyChatSpringBootApplication.class, args);
    }

    @Override
    public void run(String... args){
        // 在新线程中启动 Netty WebSocket 服务器
        new Thread(nettyWebSocketServer).start();
    }
}
  • 实现 CommandLineRunner 接口,在 Spring Boot 启动完成后执行 run 方法。
  • 将 NettyWebSocketServer 放入新线程启动,避免阻塞主线程。
  • WebSocket 连接地址:ws://localhost:8081/chat
  • 聊天页面通过 HTTP 访问:http://localhost:8080

4.2 使用方式

  1. 克隆项目后,运行 NettyChatSpringBootApplication 主类。
  2. 打开浏览器,访问 http://localhost:8080,进入聊天页面。
  3. 页面中的 JavaScript 会建立 WebSocket 连接到 ws://localhost:8081/chat。
  4. 多个浏览器窗口或不同设备连接后即可实时群聊。

5. 后续扩展方向

本项目搭建了最基本的一对多群聊框架,你可以基于此快速实现更多功能:

  • 私聊:为通道绑定用户标识,根据目标用户定向发送消息。
  • 心跳检测:通过 IdleStateHandler 检测空闲连接并主动关闭。
  • 消息持久化:集成数据库(如 MySQL、MongoDB)保存历史消息。
  • 安全认证:在 WebSocket 握手阶段通过 token 校验用户身份。
  • 界面优化:丰富聊天界面,添加表情、图片等富文本消息支持。

结语

Netty-Chat-SpringBoot 是一个学习 Netty 与 WebSocket 协议的实战入门项目,它展示了如何将 Netty 无缝集成到 Spring Boot 生态中,并快速构建一个实时聊天应用。

websocket系列:基于netty实现高性能websocket 基于spring boot + netty实现高性能的websocket 阅读详情

相关推荐

VSCode上搭建C/C++开发环境(vscode配置c/c++环境)Windows系统---保姆级教程

关于VSCode上搭建C/C++开发环境的内容,到这里就结束了,这里博主感叹一下,VSCode真的挺强大的,作为一个编辑器,可以通过和编译器链接成为开发环境,将环境配置好的话,在这上面写代码似乎也是个不错的选择。大家有任何疑问,欢迎在评论区中提出,本篇博客有任何问题和错误也欢迎来和博主讨论,真心希望能和大家一起进步。最后,如果本篇博客对你有帮助的话,能不能给博主一个三连啊!

2303_79329831的博客 8万+

SpringBoot整合Netty搭建高性能Websocket服务器(实现聊天功能)

之前使用Springboot整合了websocket,实现了一个后端向前端推送信息的基本小案例,这篇文章主要是增加了一个新的框架就是Netty,实现一个高性能的websocket服务器,并结合前端代码,实现一个基本的聊天功能。你可以根据自己的业务需求进行更改。 这里假设你已经了解了Netty和websocket的相关知识,仅仅是想通过Springboot来整合他们。根据之前大家的需求,代码已经上...

冯冬冬的博客 5739

Dell R730安装Windows Server 2008 R2

一、RAID驱动准备  在安装Windows server2008 R2操作系统时,如果没有发现硬盘,请将下面的阵列卡驱动先解压(在下载的.exe文件,双击点下一步会自动解压),解压后把那文件夹复制到U盘中。阵列卡 PERC9 H330 - H730 - H730P - H830 Controllers for Windows Server 2008 R2二、系统安装方法方法一:光盘安装  ①请您...

MarshLin 2万+

WebSocket和Netty的Protobuf之旅

WebSocket是一种在单个TCP连接上进行全双工通讯的协议。它使得客户端和服务器之间能够进行低延迟的消息传递,是实时应用(如聊天应用、在线游戏等)的理想选择。Netty是一个基于Java的异步事件驱动网络应用框架,用于快速开发可维护的高性能协议服务器和客户端。它极大地简化了网络编程的复杂性。Protocol Buffers(Protobuf)是Google开发的一种高效的序列化结构数据的方法。与JSON或XML相比,Protobuf更紧凑,解析速度更快,非常适合在高性能需求的场景下使用。

全栈工程师,热爱编程,喜欢探索各种技术栈。分享前端、后端、数据库等技术学习心得,以及在项目开发中的实践经验。 880

基于WebGL架构的3D可视化平台—平面图导航(一)

前言 利用CampusBuilder来搭建自己的虚拟世界过程有这样一个问题:如何快速聚焦到虚拟场景的某一位置。当然我们可以创建几个按钮对应查找我们需要去的位置(参照物)并聚焦,但是按钮并不是很炫酷也不能很好的反馈给我们一些信息。接下来我们就用平面导航图来解决这一问题。 第一步:使用CampusBuilder搭建模拟场景,CampusBuilder操作简单,分分钟就可以上手。 ...

nioooom的博客 4162

Curve+ 5.0.2:新一代色彩校准工具如何革新印刷行业标准

Curve+ 5.0.2作为新一代色彩校准工具,通过G7+校准算法和SCTV技术革新了印刷行业的色彩管理标准。该工具显著提升色彩精准度,减少打样时间和材料浪费,支持专色处理,实现跨材质色彩一致性,为印刷企业带来效率与质量的全面提升。

weixin_29228781的博客 529

websocket 进阶!netty框架实现websocket达到高并发

引言: 在前面两篇文章中,我们对原生websocket进行了了解,且用demo来简单的讲解了其用法。但是在实际项目中,那样的用法是不可取的,理由是tomcat对高并发的支持不怎么好,特别是tomcat9之前,可以测试发现websocket连接达到的数量很低,且容易断开。所以有现在的第三篇,对websocket的一种进阶方法。 什么是Netty Netty是业界最流行的NIO框架之一,它的健壮...

weixin_30815427的博客 246

LangChain4j + Milvus 从0-1实现会话管理与RAG检索的AIChat超详细教程

本教程将介绍如何使用LangChain4j和Milvus向量数据库构建一个具备流式输出、会话管理、会话隔离和基于文档RAG检索能力的AI机器人。我们将使用阿里百炼模型作为LLM后端,并通过Docker部署Milvus向量数据库。创建Assistant接口,定义聊天服务:LangChain4j 中文文档 | LangChain4j 中文文档wiringMode :这个属性一般两种,一种是自动装配,我们这里选择手动配置。

2301_80014343的博客 1434

netty-学习

Netty 是一个强大的网络编程框架,适用于构建高性能、高可用性的网络应用。它提供了丰富的 API 和灵活的扩展机制,使得开发高性能的网络应用变得更加简单和高效。通过异步事件驱动模型和高效的内存管理,Netty 可以处理大量并发连接并提供低延迟的服务。这个处理器类如果长时间没有读取到数据(),则关闭连接并记录日志。如果长时间没有向客户端发送数据(),则发送一个心跳消息"heart"以保持连接活跃。在Netty中,方法的参数是和Object类型的事件。

weixin_46580819的博客 1597

Windows窗口编程中的WM_PAINT、WM_ERASEBKGND、InvalidateRect、UpdateWindow、BeginPaint和EndPaint等函数详解

Windows窗口编程中的WM_PAINT、WM_ERASEBKGND、InvalidateRect、UpdateWindow、BeginPaint和EndPaint等函数详解

dvlinker的技术专栏 7165

USB 网卡——RNDIS 控制消息流程

在其控制端点上获取控制消息时,设备必须在通信类接口的中断 IN 端点上返回通知,每当设备可以返回控制消息时,主机就会轮询该通知。需要注意的是,如果设备由于某种原因收到GET_ENCAPSULATED_RESPONSE,并且无法使用控制端点上的有效数据做出响应,则应返回设置为 0x00 的单字节数据包,而不是 stall 控制端点。下表中定义了此传输。收到 RESPONSE_AVAILABLE 通知后,主机使用下表中定义的GET_ENCAPSULATED_RESPONSE 传输从控制端点读取控制消息。

tyustli 371

Spring Boot All实时通讯:WebSocket与Netty服务器搭建指南

Spring Boot All是一个集成了多种主流技术的开源项目,包含WebSocket和Netty等实时通讯相关组件,能够帮助开发者快速构建高性能的实时通讯应用。本文将详细介绍如何利用Spring Boot All项目中的WebSocket和Netty模块搭建实时通讯服务器。 ## 实时通讯技术选型:WebSocket与Netty的完美结合 在现代Web应用开发中,实时通讯功能越来越重要。W

gitblog_01095的博客 970

实现端到端加密的WebRTC视频会议终端

需要注意的是,上述示例代码中没有涉及到具体的加密算法和密钥交换过程,而是通过WebRTC API自动处理了加密和密钥交换的细节。然后,我们通过信令服务器将本地SDP发送给对方,并接收对方的SDP。最后,我们将对方的SDP设置为远程描述,并将最终的连接建立起来。最后,我们将对方的SDP设置为远程描述,并建立最终的连接。在本文中,我们将探讨如何使用WebRTC构建一个加密的视频会议终端,并提供相应的源代码。在本文中,我们将探讨如何使用WebRTC构建一个加密的视频会议终端,并提供相应的源代码。

WaJulia的博客 433

基于Netty构建WebSocket服务器实战指南

本文介绍了基于Netty框架的WebSocket服务器实现方案。首先阐述了WebSocket协议的全双工通信特性及其优势,以及Netty框架的高性能特点。核心内容包括服务器初始化配置、线程组分工和管道处理器设置。通过实时聊天室案例展示了具体实现方法,包括连接管理、消息处理和错误处理机制。服务器支持单播和广播消息模式,并提供了部署测试方案。最后给出了性能优化和安全加固建议,如调整线程数、添加身份验证和使用WSS协议等,为构建实时通信系统提供了基础架构参考。

ᶻᶻᶻ 枕星河的博客 961

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SpringBoot+Netty+Websocket整合案例(3分钟实现一个基本的聊天功能)

作者:愚公要移山www.toutiao.com/i6775018273139327492/之前使用Springboot整合了websocket,实现了一个后端向前端推送信息的基本小案例,...

程序员闪充宝 2244

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

资料整理-Spring boot 集成netty实现websocket通信

Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。也就是说,Netty 是一个基于NIO的客户、服务器端的编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户、服务端应用。Netty 是一个吸收了多种协议(包括FTP、SMTP、HTTP等各种二进制文本协议)的实现经验,并经过相当精心设计的项目。最终,Netty 成功的找到了一种方式,在保证易于开发的同时还保证了其应用的性能,稳定性和伸缩性。

零正催照 624

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

认识netty+实战

文章目录认识netty+实战一、初识netty二、Netty应用场景三、书籍推荐四、Netty名词介绍Netty线程模型(Reactor线程模型)一、单线程模型二、多线程模型三、主从线程模型Netty服务器搭建Netty实时通信原理一、实时通信二、websocket api(JS) 认识netty+实战 官网:https://netty.io/ 一、初识netty 1、Netty 由JBOSS提供的一个开源框架,现为github上的独立项目 2、Netty是一个异步的、基于事件驱动的网络应用框架,用于快速开

小猴子的博客 1286

21.1 Netty介绍及服务搭建

Netty官网链接Github仓库阻塞:线程A会等待资源处理完毕后再去执行非阻塞:线程B发起请求处理,得到反馈说他在处理资源,这是线程B会找另一个资源发起请求处理,直到有资源处理。

与海 246

Netty--聊天业务

推荐 了解 消息推送中的已读消息和未读消息设计问题 站内信问题难点 Netty websocket 实现简单聊天功能的相关

Kaka_csdn14的博客 2201

InChat快速开始:零基础搭建支持HTTP与WebSocket协议的聊天服务器

InChat是一个轻量级、高效率的支持多端(应用与硬件Iot)的可分布式、异步网络应用通讯框架。如果你正在寻找一个简单易用的聊天服务器解决方案,那么这篇快速入门指南将帮助你零基础搭建支持HTTP与WebSocket协议的InChat聊天服务器。 ## 🚀 为什么选择InChat框架? InChat框架基于Netty构建,专为需要实时通信的应用场景设计。它具有以下核心优势: - **轻量级设

gitblog_00823的博客 834

Netty原理和使用

Netty是一个高性能 事件驱动的异步的非堵塞的IO(NIO)框架,用于建立TCP等底层的连接,基于Netty可以建立高性能的Http服务器。支持HTTP、 WebSocket 、Protobuf、 Binary TCP |和UDP,Netty已经被很多高性能项目作为其Socket底层基础,如HornetQ Infinispan Vert.x Play Framework Finangle和 C

guomei的专栏 969

快速上手NettyGameServer:10分钟搭建你的第一个游戏服务器

NettyGameServer是一款基于Netty4.X实现的高性能手机游戏分布式服务器,支持TCP、UDP、HTTP和WebSocket等多种连接方式,采用Protobuf自定义协议栈进行网络通信,并集成了RPC远程调用、MyBatis3数据库存储(支持分库分表)、异步MySQL存储及Redis缓存同步更新等核心功能。通过ExcelToCode工具可快速将Excel数据生成Java类和JSON数

gitblog_00743的博客 724

如何快速搭建一个实时语音识别系统

对于想快速验证语音识别创意的开发者来说,这种云端开发体验确实很方便。从构思到可运行的原型,整个过程比传统方式快了很多。设计简洁的用户界面,便于操作和展示识别结果。通过gRPC与Python服务建立高效通信。使用流式处理模式,避免等待完整录音完成。服务间通信采用二进制协议减少传输开销。Python识别层搭建。方便学生复习和资料整理。支持多语种识别和翻译。

LapisLion88的博客 587

Springboot 结合 Netty 实战聊天系统

音视频技术为什么需要微服务 微服务,英文名:microservice,百度百科上将其定义为:SOA 架构的一种变体。微服务(或微服务架构)是一种将应用程序构造为一组低耦合的服务。 微服务有着一些鲜明的特点: 功能单一 服务粒度小 服务间独立性强 服务间依赖性弱 服务独立维护 服务独立部署 对于每一个微服务来说,其提供的功能应该是单一的;其粒度很小的;它只会提供某一业务功能涉及到的相关接口。如:电商系统中的订单系统、支付系统、产品系统等,每一个系统服务都只是做该系统独立的功能,不会涉及到不属于它的功能逻辑

声网的博客 2170

从零构建高性能即时通讯系统

这篇文章详细介绍了如何从零开始构建一个完整的即时通讯系统,涵盖后端SpringBoot服务、Netty WebSocket服务器和UniApp前端应用。主要内容包括: 技术栈说明: 后端:SpringBoot 3.2.0、Netty 4.1.104、MySQL 8.0、Redis等 前端:UniApp跨平台框架、Vue3、WebSocket协议 开发步骤: 环境准备和项目创建 数据库实体类设计 数据访问层实现 业务逻辑层开发 WebSocket服务器搭建 前端页面开发 核心功能: 用户注册/登录 实时消息收

zmz1196167569的博客 681

Buzz 离线语音转文字完整指南:免费本地转录,支持 99 种语言

Buzz 是一款免费开源的离线语音转文字工具,基于 OpenAI Whisper 运行。音频全程不出你的电脑,支持 99 种以上语言,图形界面和命令行两手都硬,适合会议纪要、视频字幕,以及一切对隐私敏感的录音处理。 [![Buzz 离线语音转文字主界面:导入音频并管理任务](https://raw.gitcode.com/GitHub_Trending/buz/buzz/raw/350fed26

gitblog_00207的博客 665
上一篇: 基于 OpenAI API的聊天机器人客户端示例
下一篇: 基于Netty实现自定义RPC框架
IT_WEH_coder
博客等级 码龄5年 2万+粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT_WEH_coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值