• C++项目 | 集群聊天服务器 | moduo网络库

C++项目 | 集群聊天服务器 | moduo网络库

2025-05-06 09:57:11 0 阅读

C++项目 | 集群聊天服务器 | moduo网络库

文章目录

  • C++项目 | 集群聊天服务器 | moduo网络库
  • 1.muduo网络库编程
    • 1.muduo源码编译安装
    • 2.基于muduo的客户端服务器编程
    • 3.用muduo中的线程池做计算任务
    • 4.muduo的日志系统
  • 2.muduo网络库的多线程模型
    • 1.网络服务器编程常用模型
    • 2.muduo中的reactor模型
  • 3.具体的步骤和示例
    • 1.muduo 网络库给用户提供了两个主要的类
    • 2.epoll + 线程池
    • 3.基于muduo网络库开发服务器程序的具体步骤
    • 4.代码
    • 5.编译
    • 6.结果图

1.muduo网络库编程

1.muduo源码编译安装

muduo库源码编译安装和环境搭建,参考笔者的另外一篇博客:

在 Ubuntu 上安装 Muduo 网络库的详细指南_如何安装muduo库呢-CSDN博客

2.基于muduo的客户端服务器编程

muduo网络库的编程很容易,要实现基于muduo网络库的服务器和客户端程序,只需要简单的组合

TcpServer和TcpClient就可以,代码实现如下:

/*
服务器类,基于muduo库开发
*/
class ChatServer
{
public:
    // 初始化TcpServer
    ChatServer(muduo::net::EventLoop *loop,
               const muduo::net::InetAddress &listenAddr)
        : _server(loop, listenAddr, "ChatServer")
    {
        // 通过绑定器设置回调函数
        _server.setConnectionCallback(bind(&ChatServer::onConnection,
                                           this, _1));

        _server.setMessageCallback(bind(&ChatServer::onMessage,
                                        this, _1, _2, _3));

        // 设置EventLoop的线程个数
        _server.setThreadNum(10);
    }

    // 启动ChatServer服务
    void start()
    {
        _server.start();
    }

private:
    // TcpServer绑定的回调函数,当有新连接或连接中断时调用
    void onConnection(const muduo::net::TcpConnectionPtr &con);
    // TcpServer绑定的回调函数,当有新数据时调用
    void onMessage(const muduo::net::TcpConnectionPtr &con,
                   muduo::net::Buffer *buf,
                   muduo::Timestamp time);

private:
    muduo::net::TcpServer _server;
};
/*
客户端实现,基于C++ muduo网络库
*/
class ChatClient
{
public:
	ChatClient(muduo::net::EventLoop *loop,
		const muduo::net::InetAddress &addr)
		:_client(loop, addr, "ChatClient")
	{
    	// 设置客户端TCP连接回调接口
   		_client.setConnectionCallback(bind(&ChatClient::onConnection,
   		this, _1));

    	// 设置客户端接收数据回调接口
        _client.setMessageCallback(bind(&ChatClient::onMessage,
            this, _1, _2, _3));
    }
    // 连接服务器
    void connect()
    {
    _client.connect();
    }
private:
    // TcpClient绑定回调函数,当连接或者断开服务器时调用
    void onConnection(const muduo::net::TcpConnectionPtr &con);
    // TcpClient绑定回调函数,当有数据接收时调用
    void onMessage(const muduo::net::TcpConnectionPtr &con,
    	muduo::net::Buffer *buf,
    	muduo::Timestamp time);
    
    muduo::net::TcpClient _client;
};

3.用muduo中的线程池做计算任务

采用muduo进行服务器编程,如果遇到需要开辟多线程单独来处理复杂的计算任务或者其它阻塞任务等,不需要直接调用pthread_create来创建线程,muduo库提供的ThreadPool线程池管理类已经把Linux的线程创建完全封装起来了,如果想研究源码,可以剖析muduo中ThreadPool.cc和Thread.cc。

ThreadPool使用示例:

// 客户端输入界面,在单独的线程中接收用户输入进行发送操作
void userClient(const muduo::net::TcpConnectionPtr &con);
muduo::ThreadPool _pool;
/*
连接服务器成功后,开启和服务器的交互通信功能
*/
if (con->connected()) // 和服务器连接成功
{
    LOG_INFO << "connect server success!";
    // 启动线程专门处理用户的输入操作
    _pool.run(bind(&ChatClient::userClient, this, con));
}
else // 和服务器连接失败
{
    
}

4.muduo的日志系统

在开发软件产品过程中,日志的输出非常重要,可以记录很多软件运行过程中的信息,方便定位调试问题,跟踪统计信息等等,muduo库提供的日志级别有:

#define LOG_TRACE if (muduo::Logger::logLevel() <= muduo::Logger::TRACE) 
 muduo::Logger(__FILE__, __LINE__, muduo::Logger::TRACE, __func__).stream()
#define LOG_DEBUG if (muduo::Logger::logLevel() <= muduo::Logger::DEBUG) 
 muduo::Logger(__FILE__, __LINE__, muduo::Logger::DEBUG, __func__).stream()
#define LOG_INFO if (muduo::Logger::logLevel() <= muduo::Logger::INFO) 
 muduo::Logger(__FILE__, __LINE__).stream()
#define LOG_WARN muduo::Logger(__FILE__, __LINE__, muduo::Logger::WARN).stream()
#define LOG_ERROR muduo::Logger(__FILE__, __LINE__,
 muduo::Logger::ERROR).stream()
#define LOG_FATAL muduo::Logger(__FILE__, __LINE__,
 muduo::Logger::FATAL).stream()
#define LOG_SYSERR muduo::Logger(__FILE__, __LINE__, false).stream()
#define LOG_SYSFATAL muduo::Logger(__FILE__, __LINE__, true).stream()

// 示例:
LOG_INFO << "记录相应级别的日志信息";

2.muduo网络库的多线程模型

1.网络服务器编程常用模型

【方案1】 : accept + read/write

不是并发服务器

【方案2】 : accept + fork - process-pre-connection

适合并发连接数不大,计算任务工作量大于fork的开销

【方案3】 :accept + thread thread-pre-connection

比方案2的开销小了一点,但是并发造成线程堆积过多

【方案4】: muduo的网络设计:reactors in threads - one loop per thread

方案的特点是one loop per thread,有一个main reactor负载accept连接,然后把连接分发到某个sub

reactor(采用round-robin的方式来选择sub reactor),该连接的所用操作都在那个sub reactor所处

的线程中完成。多个连接可能被分派到多个线程中,以充分利用CPU。

Reactor poll的大小是固定的,根据CPU的数目确定。

// 设置EventLoop的线程个数,底层通过EventLoopThreadPool线程池管理线程类EventLoopThread
_server.setThreadNum( 10 );

一个Base IO thread负责accept新的连接,接收到新的连接以后,使用轮询的方式在reactor pool中找

到合适的sub reactor将这个连接挂载上去,这个连接上的所有任务都在这个sub reactor上完成。

如果有过多的耗费CPU I/O的计算任务,可以提交到创建的ThreadPool线程池中专门处理耗时的计算任

务。

【方案5】 : reactors in process - one loop pre process

nginx服务器的网络模块设计,基于进程设计,采用多个Reactors充当I/O进程和工作进程,通过一把

accept锁,完美解决多个Reactors的“惊群现象”。

2.muduo中的reactor模型

reactor模型是什么?先看一下维基百科的标准解释:

  • The reactor design pattern is an event handling pattern for handling service requests delivered concurrently to a service handler by one or more inputs.

  • The service handler then demultiplexes the incoming requests and dispatches them synchronously to the associated request handlers.

从上面的描述,可以看出如下关键点:

  1. 事件驱动(event handling)

  2. 可以处理一个或多个输入源(one or more inputs)

  3. 通过Service Handler同步的将输入事件(Event)采用多路复用分发给相应的Request Handler(多个)处理

建议大家打开muduo的源码,从TcpServer的start方法开始,阅读一下muduo库的源码实现,理解mainReactor和subReactor的工作原理,这样对于该项目的面试问题,也能更深入的去表达muduo相关的内容。

3.具体的步骤和示例

1.muduo 网络库给用户提供了两个主要的类

TcpServer:用于编写服务器程序的

TcpClient:用于编写客户端程序的

2.epoll + 线程池

好处:能够把网络I/O的代码和业务代码区分开

只需要关注用户的连接和断开,用户的可读写事件这两件事情怎么做

至于什么时候做由网络库决定,如何监听这些事件也由网络库实现

3.基于muduo网络库开发服务器程序的具体步骤

1.组合TcpServer对象

2.创建EventLoop事件循环对象的指针

3.明确TcpServer构造函数需要什么参数,输出ChatServer的构造函数

4.在当前服务器类的构造函数当中,注册处理连接的回调函数和处理读写事件的回调函数

5.设置合适的服务端线程数量,muduo库会自己分配IO线程和work线程的

4.代码

//服务器端程序,实现功能是客户端发过来什么原封不动返回去
#include
#include
#include
#include
using namespace std;
using namespace muduo;
using namespace muduo::net;
using namespace placeholders;

class ChatServer
{
public:
    ChatServer(EventLoop *loop,//时间循环
    const InetAddress& listenAddr,//IP+Port
    const string& nameArg)//服务器的名字
    :_server(loop,listenAddr,nameArg),
    _loop(loop)
    {
        //给服务器注册用户连接的创建和断开回调
        _server.setConnectionCallback(std::bind(&ChatServer::onConnection,this,_1));
        //给服务器注册用户读写事件回调
        _server.setMessageCallback(std::bind(&ChatServer::onMessage,this,_1,_2,_3));

        //设置服务器端的线程数量 1个I/O线程,3个工作线程
        _server.setThreadNum(4);
    }

    //开启事件循环
    void start()
    {
        _server.start();
    }
private:
    //专门处理用户的连接创建和断开
    void onConnection(const TcpConnectionPtr& conn)
    {
        if(conn->connected())
        {
            cout<<conn->peerAddress().toIpPort()<<"->"<<
                conn->localAddress().toIpPort()<<"state : online"<<endl;  
        }
        else
        {
            cout<<conn->peerAddress().toIpPort()<<"->"<<
                conn->localAddress().toIpPort()<<"state : offline"<<endl;  
            conn->shutdown();//相当于close(fd)
            //_loop->quit(); //退出循环,相当于服务器关闭了
        }
    }
    //专门处理用户的读写事件
    void onMessage(const TcpConnectionPtr& conn,//连接
    Buffer* buffer,//缓冲区
    Timestamp time)//接收到数据的时间信息
    {
        string buf=buffer->retrieveAllAsString();
        cout<<"recv data:"<<buf<<"time:"<<time.toString()<<endl;
        conn->send(buf);
    }
    TcpServer _server;//1.
    EventLoop *_loop;//2.相当于epoll
};

int main()
{
    EventLoop loop;
    InetAddress addr("127.0.0.1",8889);
    ChatServer server(&loop,addr,"Chatserver");

    server.start();//相当于把listenfd通过epoll_ctl添加到epoll上了
    loop.loop();//epoll_wait以阻塞方式等待新用户连接,已连接用户的读写事件等
    return 0;
}

5.编译

g++ muduo_server.cpp -o test -lmuduo_net -lmuduo_base -lpthread

注意要按照net->base->thread的顺序,因为base会依赖net的东西

6.结果图

本文地址:https://www.vps345.com/8583.html

搜索文章

Tags

PV计算 带宽计算 流量带宽 服务器带宽 上行带宽 上行速率 什么是上行带宽? CC攻击 攻击怎么办 流量攻击 DDOS攻击 服务器被攻击怎么办 源IP 服务器 linux 运维 游戏 云计算 javascript 前端 chrome edge 英语 macos windows conda 阿里云 网络 网络安全 网络协议 llama 算法 opencv 自然语言处理 神经网络 语言模型 ubuntu ssh 笔记 deepseek Ollama 模型联网 API CherryStudio php 人工智能 python MCP docker java 容器 json 数据库 centos oracle 关系型 安全 分布式 nginx 负载均衡 Dify tcp/ip tomcat jenkins gitee spring boot asm 学习方法 经验分享 学习 Ubuntu 开发环境 C# MQTTS 双向认证 emqx 进程 操作系统 进程控制 RTSP xop RTP RTSPServer 推流 视频 vscode adb jellyfin nas debian PVE openvpn server openvpn配置教程 centos安装openvpn c++ 并查集 leetcode harmonyos 华为 开发语言 typescript 计算机网络 科技 ai 个人开发 机器学习 mysql android 数据结构 c语言 深度学习 YOLO 目标检测 计算机视觉 java-ee elasticsearch fastapi mcp mcp-proxy mcp-inspector fastapi-mcp agent sse xcode ide 开源 github 实时音视频 实时互动 HarmonyOS Next DevEco Studio Qwen2.5-coder 离线部署 架构 云原生 etcd 数据安全 RBAC word图片自动上传 word一键转存 复制word图片 复制word图文 复制word公式 粘贴word图文 粘贴word公式 gnu pip cron crontab日志 unix 大数据 spark hive 高级IO epoll ssl 前端框架 ui 华为云 华为od eureka filezilla 无法连接服务器 连接被服务器拒绝 vsftpd 331/530 sublime text 编辑器 智能路由器 外网访问 内网穿透 端口映射 思科 嵌入式 linux驱动开发 arm开发 嵌入式硬件 小程序 微信小程序域名配置 微信小程序服务器域名 微信小程序合法域名 小程序配置业务域名 微信小程序需要域名吗 微信小程序添加域名 Linux 进程信号 vue3 HTML audio 控件组件 vue3 audio音乐播放器 Audio标签自定义样式默认 vue3播放音频文件音效音乐 自定义audio播放器样式 播放暂停调整声音大小下载文件 持续部署 鸿蒙 GaN HEMT 氮化镓 单粒子烧毁 辐射损伤 辐照效应 数据分析 numpy redis c# 集成学习 集成测试 创意 社区 protobuf 序列化和反序列化 安装 k8s kubernetes Flask FastAPI Waitress Gunicorn uWSGI Uvicorn 自动化 spring mac 游戏程序 ios ue5 vr EtherCAT转Modbus ECT转Modbus协议 EtherCAT转485网关 ECT转Modbus串口网关 EtherCAT转485协议 ECT转Modbus网关 面试 性能优化 jdk intellij-idea 物联网 mcu iot 信息与通信 ip命令 新增网卡 新增IP 启动网卡 MacOS录屏软件 多线程 windows 服务器安装 fstab 运维开发 vnc 产品经理 agi microsoft vim Docker Hub docker pull 镜像源 daemon.json 媒体 efficientVIT YOLOv8替换主干网络 TOLOv8 git 网络药理学 生信 生物信息学 gromacs 分子动力学模拟 MD 动力学模拟 llm transformer 聚类 单片机 计算机外设 电脑 软件需求 宝塔面板访问不了 宝塔面板网站访问不了 宝塔面板怎么配置网站能访问 宝塔面板配置ip访问 宝塔面板配置域名访问教程 宝塔面板配置教程 Dell R750XS ip powerpoint pycharm vue.js audio vue音乐播放器 vue播放音频文件 Audio音频播放器自定义样式 播放暂停进度条音量调节快进快退 自定义audio覆盖默认样式 dify ip协议 虚拟机 VMware rust http 互信 express p2p ollama 私有化 本地部署 flask AI编程 AIGC 银河麒麟 kylin v10 麒麟 v10 ESXi 智能手机 NAS Termux Samba 音视频 安防软件 websocket 政务 分布式系统 监控运维 Prometheus Grafana 后端 postman mock mock server 模拟服务器 mock服务器 Postman内置变量 Postman随机数据 docker compose list 模拟实现 LDAP 虚拟局域网 Alexnet AI写作 程序员创富 机器人 visual studio code IIS服务器 IIS性能 日志监控 腾讯云 命名管道 客户端与服务端通信 深度求索 私域 知识库 maven intellij idea 大模型 tcpdump pytorch 系统架构 微服务 设计模式 软件工程 rpc threejs 3D rocketmq 远程 命令 执行 sshpass 操作 ansible 腾讯云大模型知识引擎 Deepseek 云桌面 微软 AD域控 证书服务器 dubbo 监控 自动化运维 AI Agent .netcore 报错 目标跟踪 OpenVINO 推理应用 kamailio sip VoIP iperf3 带宽测试 Reactor C++ 课程设计 .net 虚拟现实 bash JAVA Java spring cloud sqlserver 开发 rust腐蚀 docker搭建nacos详解 docker部署nacos docker安装nacos 腾讯云搭建nacos centos7搭建nacos gitlab gpu算力 apache DeepSeek chatgpt ESP32 node.js C 环境变量 进程地址空间 豆瓣 追剧助手 迅雷 微信 YOLOv12 vSphere vCenter 软件定义数据中心 sddc golang 键盘 链表 CLion 远程连接 IDE 低代码 aws googlecloud 隐藏文件 隐藏目录 文件系统 管理器 通配符 MQTT协议 消息服务器 代码 远程工作 jmeter 软件测试 web安全 HCIE 数通 alias unalias 别名 firewalld 读写锁 僵尸进程 svn 多线程服务器 Linux网络编程 gateway Clion Nova ResharperC++引擎 Centos7 远程开发 VMware安装Ubuntu Ubuntu安装k8s Portainer搭建 Portainer使用 Portainer使用详解 Portainer详解 Portainer portainer virtualenv pillow ue4 着色器 虚幻 mongodb live555 rtsp rtp html5 firefox 大数据平台 rag ragflow ragflow 源码启动 Hive环境搭建 hive3环境 Hive远程模式 springcloud WSL win11 无法解析服务器的名称或地址 飞牛nas fnos react.js 前端面试题 flash-attention postgresql cuda cudnn anaconda https Kali Linux 黑客 渗透测试 信息收集 DNS WSL2 上安装 Ubuntu kylin OpenManus 程序人生 指令 mq rabbitmq kafka qt QT 5.12.12 QT开发环境 Ubuntu18.04 Ubuntu Server Ubuntu 22.04.5 ux 代码调试 ipdb Doris搭建 docker搭建Doris Doris搭建过程 linux搭建Doris Doris搭建详细步骤 Doris部署 ollama下载加速 进程优先级 调度队列 进程切换 Windsurf webstorm yum docker-compose 中间件 iis 视觉检测 NFS FTP 服务器 matplotlib fonts-noto-cjk DeepSeek-R1 API接口 VMware创建虚拟机 源码剖析 rtsp实现步骤 流媒体开发 设置代理 实用教程 cpu 内存 实时 使用 WebUI DeepSeek V3 AI大模型 缓存 强制清理 强制删除 mac废纸篓 权限 远程控制 远程看看 远程协助 iftop 网络流量监控 udp jar gradle C语言 xml ipython 硬件工程 flutter Hyper-V WinRM TrustedHosts minicom 串口调试工具 测试工具 fd 文件描述符 log4j edge浏览器 KylinV10 麒麟操作系统 Vmware 串口服务器 YOLOv8 NPU Atlas800 A300I pro asi_bench stm32 uni-app 路径解析 DigitalOcean GPU服务器购买 GPU服务器哪里有 GPU服务器 iBMC UltraISO mount挂载磁盘 wrong fs type LVM挂载磁盘 Centos7.9 压测 ECS VMware安装mocOS macOS系统安装 camera Arduino 电子信息 域名服务 DHCP 符号链接 配置 WSL2 Ubuntu22.04 虚拟化 开发人员主页 Linux的权限 Ubuntu共享文件夹 共享目录 Linux共享文件夹 windows日志 selenium WLAN prometheus 监控k8s 监控kubernetes bcompare Beyond Compare 系统开发 binder 车载系统 framework 源码环境 burp suite 抓包 perf linux内核 爬虫 数据集 dell服务器 go 代理模式 Linux PID bug 安卓模拟器 基础环境 linux安装配置 kali 共享文件夹 安装教程 GPU环境配置 Ubuntu22 CUDA PyTorch Anaconda安装 rime 中兴光猫 换光猫 网络桥接 自己换光猫 本地环回 bind 安卓 fpga开发 统信UOS 麒麟 bonding 链路聚合 鸿蒙系统 迁移指南 5G 3GPP 卫星通信 UOS 统信操作系统 oceanbase rc.local 开机自启 systemd mybatis 监控k8s集群 集群内prometheus vmware 卡死 Cline 自动化编程 gcc centos 7 openwrt llama3 Chatglm 开源大模型 unity ssh漏洞 ssh9.9p2 CVE-2025-23419 ping++ ddos RAGFLOW stm32项目 ros2 moveit 机器人运动 rancher ai小智 语音助手 ai小智配网 ai小智教程 智能硬件 esp32语音助手 diy语音助手 zotero WebDAV 同步失败 selete ffmpeg wireshark 显示过滤器 ICMP Wireshark安装 客户端 linux环境变量 温湿度数据上传到服务器 Arduino HTTP 工业4.0 环境配置 向日葵 数据挖掘 网络用户购物行为分析可视化平台 大数据毕业设计 1024程序员节 playbook 剧本 微信分享 Image wxopensdk 主从复制 html sql KingBase nftables 防火墙 博客 docker搭建pg docker搭建pgsql pg授权 postgresql使用 postgresql搭建 windwos防火墙 defender防火墙 win防火墙白名单 防火墙白名单效果 防火墙只允许指定应用上网 防火墙允许指定上网其它禁止 无人机 CPU 主板 电源 网卡 大模型技术 本地部署大模型 linux上传下载 弹性计算 云服务器 裸金属服务器 弹性裸金属服务器 c/c++ 串口 程序 编程 性能分析 RAID RAID技术 磁盘 存储 计算生物学 生物信息 基因组 图像处理 3d LLM SSH 技能大赛 DeepSeek行业应用 Heroku 网站部署 compose 端口测试 VR手套 数据手套 动捕手套 动捕数据手套 搜索引擎 网络结构图 yaml Ultralytics 可视化 excel 游戏机 用户缓冲区 hugo ceph Netty 即时通信 NIO 支付 微信支付 开放平台 Trae AI代码编辑器 压力测试 SWAT 配置文件 服务管理 网络共享 程序员 lb 协议 ruoyi wps pgpool ci/cd 其他 SenseVoice 系统安全 数学建模 远程桌面 top Linux top top命令详解 top命令重点 top常用参数 显卡驱动 AutoDL matlab ecmascript KVM 半虚拟化 硬件虚拟化 Hypervisor OpenSSH 交叉编译 ubuntu20.04 ros ros1 Noetic 20.04 apt 安装 outlook micropython esp32 mqtt cocoapods 输入法 思科模拟器 Cisco av1 电视盒子 机顶盒ROM 魔百盒刷机 nuxt3 7z okhttp sonoma 自动更新 计算机 Jellyfin 金融 tcp 交互 seatunnel wsl 版本 django sqlite TrueLicense neo4j 数据仓库 数据库开发 数据库架构 database openssl 密码学 yolov8 模拟退火算法 自动驾驶 田俊楠 序列化反序列化 Kali 渗透 jina MQTT mosquitto 消息队列 IPv4 子网掩码 公网IP 私有IP 浏览器自动化 SSH 密钥生成 SSH 公钥 私钥 生成 r语言 数据可视化 keepalived 企业微信 Linux24.04 deepin 算力 arkUI 社交电子 游戏引擎 数据库系统 Linux的基础指令 高效远程协作 TrustViewer体验 跨设备操作便利 智能远程控制 DIFY jupyter hibernate chrome devtools chromedriver DBeaver rustdesk composer 产测工具框架 IMX6ULL 管理框架 ArcTS 登录 ArcUI GridItem 漏洞 kind springboot远程调试 java项目远程debug docker远程debug java项目远程调试 springboot远程 宝塔面板 同步 备份 建站 trea idea 安全威胁分析 Java Applet URL操作 服务器建立 Socket编程 网络文件读取 大模型入门 大模型教程 鲲鹏 昇腾 npu remote-ssh 直流充电桩 充电桩 Cookie Cursor mamba Vmamba W5500 OLED u8g2 TCP服务器 SEO chfs ubuntu 16.04 nlp yolov5 微信小程序 openEuler unity3d 网络穿透 android studio IO 火绒安全 lio-sam SLAM Nuxt.js Xterminal uv devops 大文件分片上传断点续传及进度条 如何批量上传超大文件并显示进度 axios大文件切片上传详细教 node服务器合并切片 vue3大文件上传报错提示错误 vu大文件秒传跨域报错cors 智能音箱 智能家居 HarmonyOS OpenHarmony 真机调试 zabbix notepad milvus pygame 小游戏 五子棋 hadoop dba ubuntu24.04.1 致远OA OA服务器 服务器磁盘扩容 sdkman ocr OD机试真题 华为OD机试真题 服务器能耗统计 NLP模型 NLP 自学笔记 小米 澎湃OS Android pdf CORS 跨域 tar 蓝桥杯 雨云 NPS 多进程 飞书 HiCar CarLife+ CarPlay QT RK3588 dns 孤岛惊魂4 uniapp vue Node-Red 编程工具 流编程 图形渲染 繁忙 服务器繁忙 解决办法 替代网站 汇总推荐 AI推理 恒源云 web css saltstack nvidia 传统数据库升级 银行 大语言模型 LLMs 边缘计算 rnn 相机 可信计算技术 安全架构 网络攻击模型 fast arm opcua opcda KEPServer安装 curl wget 能力提升 面试宝典 技术 IT信息化 oneapi 大模型微调 open webui n8n 工作流 workflow 图片增强 增强数据 IM即时通讯 QQ 剪切板对通 HTML FORMAT minio 嵌入式系统开发 XCC Lenovo 混合开发 环境安装 JDK Linux awk awk函数 awk结构 awk内置变量 awk参数 awk脚本 awk详解 华为认证 网络工程师 交换机 移动云 MS Materials 业界资讯 EtherNet/IP串口网关 EIP转RS485 EIP转Modbus EtherNet/IP网关协议 EIP转RS485网关 EIP串口服务器 arcgis redhat code-server mysql离线安装 ubuntu22.04 mysql8.0 源码 毕业设计 智慧农业 开源鸿蒙 团队开发 磁盘清理 部署 SSL 域名 skynet k8s二次开发 集群管理 conda配置 conda镜像源 centos-root /dev/mapper yum clean all df -h / du -sh 国产数据库 瀚高数据库 数据迁移 下载安装 考研 硬件架构 onlyoffice 在线office AISphereButler pyautogui 京东云 shell embedding ShenTong 国产化 visualstudio 命令行 基础入门 开机自启动 图形化界面 nfs echarts 信息可视化 网页设计 prompt easyui langchain Google pay Apple pay 框架搭建 线程 代理 less LORA x64 SIGSEGV SSE xmm0 毕设 稳定性 看门狗 Typore AI 原生集成开发环境 Trae AI yum源切换 更换国内yum源 国产操作系统 ukui 麒麟kylinos openeuler bot Docker 上传视频文件到服务器 uniApp本地上传视频并预览 uniapp移动端h5网页 uniapp微信小程序上传视频 uniapp app端视频上传 uniapp uview组件库 chrome 浏览器下载 chrome 下载安装 谷歌浏览器下载 统信 虚拟机安装 小番茄C盘清理 便捷易用C盘清理工具 小番茄C盘清理的优势尽显何处? 教你深度体验小番茄C盘清理 C盘变红?!不知所措? C盘瘦身后电脑会发生什么变化? 宝塔 RustDesk自建服务器 rustdesk服务器 docker rustdesk 黑客技术 web3.py URL VPS pyqt DeepSeek r1 Open WebUI cd 目录切换 vpn MySql EasyConnect eclipse 热榜 飞牛NAS 飞牛OS MacBook Pro RTMP 应用层 harmonyOS面试题 ArkTs ArkUI db cnn 策略模式 单例模式 邮件APP 免费软件 big data opensearch helm grafana 服务器主板 AI芯片 miniapp 调试 debug 断点 网络API请求调试方法 ssrf 失效的访问控制 MI300x WebRTC gpt AI-native Docker Desktop powerbi Mac内存不够用怎么办 adobe elk Python 网络编程 聊天服务器 套接字 TCP Socket webrtc 办公自动化 自动化生成 pdf教程 xpath定位元素 IPMITOOL BMC 硬件管理 bat 卷积神经网络 话题通信 服务通信 xrdp 职场和发展 string模拟实现 深拷贝 浅拷贝 经典的string类问题 三个swap 游戏服务器 TrinityCore 魔兽世界 SSL证书 大模型部署 Ubuntu DeepSeek DeepSeek Ubuntu DeepSeek 本地部署 DeepSeek 知识库 DeepSeek 私有化知识库 本地部署 DeepSeek DeepSeek 私有化部署 asp.net大文件上传 asp.net大文件上传下载 asp.net大文件上传源码 ASP.NET断点续传 asp.net上传文件夹 asp.net上传大文件 .net core断点续传 群晖 文件分享 VSCode linux 命令 sed 命令 云服务 odoo 服务器动作 Server action 雨云服务器 智能电视 springsecurity6 oauth2 授权服务器 token sas 崖山数据库 YashanDB springboot Ubuntu 24.04.1 轻量级服务器 软链接 硬链接 sqlite3 rsyslog Anolis nginx安装 linux插件下载 maxkb ARG make命令 makefile文件 SSH 服务 SSH Server OpenSSH Server GameFramework HybridCLR Unity编辑器扩展 自动化工具 服务器数据恢复 数据恢复 存储数据恢复 raid5数据恢复 磁盘阵列数据恢复 npm 银河麒麟操作系统 自动化任务管理 CosyVoice 服务器部署ai模型 驱动开发 嵌入式实习 fork wait waitpid exit 网络爬虫 su sudo 推荐算法 镜像 Ark-TS语言 蓝耘科技 元生代平台工作流 ComfyUI 三级等保 服务器审计日志备份 WebServer kvm qemu libvirt bootstrap 文心一言 nextjs react reactjs 软考 流式接口 Xinference RAGFlow api 联想开天P90Z装win10 ROS Kylin-Server 服务器安装 虚拟显示器 cmos 硬件 docker命令大全 virtualbox tensorflow DocFlow 重启 排查 系统重启 日志 原因 大文件秒传跨域报错cors 信号处理 网工 ubuntu24 vivado24 宕机切换 服务器宕机 免费域名 域名解析 apt 国内源 数据管理 数据治理 数据编织 数据虚拟化 Deepseek-R1 私有化部署 推理模型 idm CH340 串口驱动 CH341 uart 485 MCP server C/S HarmonyOS NEXT 原生鸿蒙 k8s集群资源管理 云原生开发 RAG 检索增强生成 文档解析 大模型垂直应用 飞牛 医疗APP开发 app开发 通信工程 毕业 模拟器 教程 环境迁移 Helm k8s集群 lsb_release /etc/issue /proc/version uname -r 查看ubuntu版本 树莓派 VNC RoboVLM 通用机器人策略 VLA设计哲学 vlm fot robot 视觉语言动作模型 具身智能 thingsboard axure 富文本编辑器 zip unzip 本地部署AI大模型 mariadb 相差8小时 UTC 时间 实习 netty c 大模型面经 大模型学习 AnythingLLM AnythingLLM安装 IIS .net core Hosting Bundle .NET Framework vs2022 AP配网 AK配网 小程序AP配网和AK配网教程 WIFI设备配网小程序UDP开 XFS xfs文件系统损坏 I_O error 直播推流 WebVM FunASR ASR 流水线 脚本式流水线 file server http server web server Linux 维护模式 Linux无人智慧超市 LInux多线程服务器 QT项目 LInux项目 单片机项目 状态管理的 UDP 服务器 Arduino RTOS 服务器配置 CrewAI gitea 微信公众平台 risc-v 金仓数据库 2025 征文 数据库平替用金仓 CentOS Stream CentOS banner Invalid Host allowedHosts rdp 实验 firewall Wi-Fi ssh远程登录 灵办AI 执法记录仪 智能安全帽 smarteye SysBench 基准测试 服务器时间 单元测试 功能测试 云电竞 云电脑 todesk java-rabbitmq docker run 数据卷挂载 交互模式 Erlang OTP gen_server 热代码交换 事务语义 MNN Qwen 视频编解码 换源 Debian 深度优先 图论 并集查找 换根法 树上倍增 Minecraft DOIT 四博智联 强化学习 GCC crosstool-ng Redis Desktop Dell HPE 联想 浪潮 iDRAC R720xd freebsd etl 服务器管理 配置教程 网站管理 wsl2 ROS2 gaussdb trae eNSP 网络规划 VLAN 企业网络 区块链 测试用例 .net mvc断点续传 磁盘监控 多层架构 解耦 网络管理 2024 2024年上半年 下午真题 答案 AI作画 rclone AList webdav fnOS next.js 部署next.js 聊天室 UOS1070e telnet 远程登录 代码托管服务 gpt-3 dity make 微信开放平台 微信公众号配置 宝塔面板无法访问 muduo 开机黑屏 X11 Xming k8s资源监控 annotations自动化 自动化监控 监控service 监控jvm 实战案例 searxng 银河麒麟服务器操作系统 系统激活 Docker引擎已经停止 Docker无法使用 WSL进度一直是0 镜像加速地址 export import save load 迁移镜像 矩阵 分析解读 ruby 自动化测试 软件构建 cfssl Docker Compose safari Mac 系统 拓扑图 历史版本 下载 信号 can 线程池 visual studio 王者荣耀 像素流送api 像素流送UE4 像素流送卡顿 像素流送并发支持 TRAE 显示管理器 lightdm gdm 小艺 Pura X 设备 GPU PCI-Express Playwright vscode 1.86 网站搭建 serv00 jetty undertow P2P HDLC nac 802.1 portal IPMI 毕昇JDK 健康医疗 互联网医院 MacMini 迷你主机 mini Apple 双系统 GRUB引导 Linux技巧 上传视频至服务器代码 vue3批量上传多个视频并预览 如何实现将本地视频上传到网页 element plu视频上传 ant design vue vue3本地上传视频及预览移除 宠物 免费学习 宠物领养 宠物平台 ubuntu 18.04 MVS 海康威视相机 项目部署 磁盘镜像 服务器镜像 服务器实时复制 实时文件备份 xss dock 加速 mcp服务器 cursor client close 我的世界服务器搭建 minecraft jvm Linux环境 PX4 HTTP 服务器控制 ESP32 DeepSeek 银河麒麟桌面操作系统 Kylin OS vasp安装 Qualcomm WoS QNN AppBuilder 查询数据库服务IP地址 SQL Server 分布式训练 语音识别 大模型应用 Radius xshell termius iterm2 qt项目 qt项目实战 qt教程 容器技术 国标28181 视频监控 监控接入 语音广播 流程 SIP SDP 匿名管道 frp K8S k8s管理系统 超融合 服务网格 istio kernel seleium EMQX 通信协议 glibc 银河麒麟高级服务器 外接硬盘 Kylin 物联网开发 根服务器 clickhouse 合成模型 扩散模型 图像生成 对比 工具 meld DiffMerge 做raid 装系统 服务器安全 网络安全策略 防御服务器攻击 安全威胁和解决方案 程序员博客保护 数据保护 安全最佳实践 端口聚合 windows11 junit 达梦 DM8 System V共享内存 进程通信 鸿蒙开发 移动开发 语法 内网服务器 内网代理 内网通信 VM搭建win2012 win2012应急响应靶机搭建 攻击者获取服务器权限 上传wakaung病毒 应急响应并溯源 挖矿病毒处置 应急响应综合性靶场 HP Anyware 需求分析 规格说明书 黑苹果 AD域 反向代理 生活 sequoiaDB IO模型 捆绑 链接 谷歌浏览器 youtube google gmail 软负载 docker desktop image 备选 网站 调用 示例 prometheus数据采集 prometheus数据模型 prometheus特点 代理服务器 北亚数据恢复 oracle数据恢复 开源软件 端口 查看 ss 机柜 1U 2U deployment daemonset statefulset cronjob 阿里云ECS wpf regedit 开机启动 CDN word Headless Linux 远程服务 webgl 华为机试 镜像下载 rpa 本地化部署 React Next.js 开源框架 oracle fusion oracle中间件 云耀服务器 IMX317 MIPI H265 VCU 自定义客户端 SAS 硅基流动 ChatBox wsgiref Web 服务器网关接口 flink 运维监控 Linux权限 权限命令 特殊权限 Linux find grep 钉钉 DevOps 软件交付 数据驱动 应用场景 大大通 第三代半导体 碳化硅 MAC SecureCRT 回显服务器 UDP的API使用 玩机技巧 软件分享 软件图标 Windows ai工具 Docker快速入门 java-rocketmq armbian u-boot h.264 抓包工具 查看显卡进程 fuser ArtTS 项目部署到linux服务器 项目部署过程 ftp 升级 CVE-2024-7347 网易邮箱大师 UEFI Legacy MBR GPT U盘安装操作系统 移动魔百盒 vscode1.86 1.86版本 ssh远程连接 open Euler dde USB转串口 qt5 客户端开发 网络建设与运维 LLM Web APP Streamlit cpp-httplib MacOS web3 ELF加载 单一职责原则 信创 信创终端 中科方德 服务器扩容没有扩容成功 搭建个人相关服务器 IMM SRS 流媒体 直播 李心怡 sysctl.conf vm.nr_hugepages wordpress 无法访问wordpess后台 打开网站页面错乱 linux宝塔面板 wordpress更换服务器 tidb GLIBC burpsuite 安全工具 mac安全工具 burp安装教程 渗透工具 docker部署翻译组件 docker部署deepl docker搭建deepl java对接deepl 翻译组件使用 离线部署dify g++ g++13 docker部署Python 授时服务 北斗授时 deepseek r1 HistoryServer Spark YARN jobhistory MDK 嵌入式开发工具 论文笔记 高效日志打印 串口通信日志 服务器日志 系统状态监控日志 异常记录日志 华为证书 HarmonyOS认证 华为证书考试 企业网络规划 华为eNSP iphone 僵尸世界大战 游戏服务器搭建 远程过程调用 Windows环境 zookeeper swoole FTP服务器 v10 软件 DenseNet ldap hosts MAVROS 四旋翼无人机 无桌面 GIS 遥感 WebGIS 内网环境 lua navicat 架构与原理 欧标 OCPP 多个客户端访问 IO多路复用 TCP相关API opengl IDEA kotlin 网卡的名称修改 eth0 ens33 Attention 浪潮信息 AI服务器 tailscale derp derper 中转 AI员工 triton 模型分析 python2 ubuntu24.04 音乐库 Web应用服务器 论文阅读 怎么卸载MySQL MySQL怎么卸载干净 MySQL卸载重新安装教程 MySQL5.7卸载 Linux卸载MySQL8.0 如何卸载MySQL教程 MySQL卸载与安装 内核 vue-i18n 国际化多语言 vue2中英文切换详细教程 如何动态加载i18n语言包 把语言json放到服务器调用 前端调用api获取语言配置文件 perl NAT转发 NAT Server Unity Dedicated Server Host Client 无头主机 aarch64 编译安装 HPC Sealos dash 正则表达式 安装MySQL deep learning Ubuntu 24 常用命令 Ubuntu 24 Ubuntu vi 异常处理 性能测试 视频平台 录像 视频转发 视频流 影刀 #影刀RPA# vllm 知识图谱 常用命令 文本命令 目录命令 python3.11 极限编程 es LInux ebpf uprobe midjourney Reactor反应堆 Qwen2.5-VL sentinel 服务器无法访问 ip地址无法访问 无法访问宝塔面板 宝塔面板打不开 Mermaid 可视化图表 Carla 智能驾驶 nosql 佛山戴尔服务器维修 佛山三水服务器维修 react native 嵌入式Linux IPC EMUI 回退 降级 网络文件系统 figma 干货分享 黑客工具 密码爆破 lvm 磁盘挂载 磁盘分区 Zoertier 内网组网 Spring Security 技术共享 我的世界 我的世界联机 数码 多端开发 智慧分发 应用生态 鸿蒙OS 增强现实 沉浸式体验 技术实现 案例分析 AR GoogLeNet 加解密 Yakit yaklang 电视剧收视率分析与可视化平台 虚幻引擎 线性代数 电商平台 llama.cpp samba 问题解决 ecm bpm C++软件实战问题排查经验分享 0xfeeefeee 0xcdcdcdcd 动态库加载失败 程序启动失败 程序运行权限 标准用户权限与管理员权限 nvm whistle ISO镜像作为本地源 Web服务器 多线程下载工具 PYTHON USB网络共享 win服务器架设 windows server 备份SQL Server数据库 数据库备份 傲梅企业备份网络版 元服务 应用上架 音乐服务器 Navidrome 音流 浏览器开发 AI浏览器 在线预览 xlsx xls文件 在浏览器直接打开解析xls表格 前端实现vue3打开excel 文件地址url或接口文档流二进 Python基础 Python教程 Python技巧 H3C proxy模式 烟花代码 烟花 元旦 pppoe radius 状态模式 性能调优 安全代理 本地知识库部署 DeepSeek R1 模型 scikit-learn dns是什么 如何设置电脑dns dns应该如何设置 网络搭建 神州数码 神州数码云平台 云平台 copilot 网页服务器 web服务器 Nginx VS Code 前后端分离 Mac软件 deekseek AI agent 免密 公钥 私钥 Claude netlink libnl3 kerberos 个人博客 hexo 大屏端 小智AI服务端 xiaozhi TTS 软件卸载 系统清理 PPI String Cytoscape CytoHubba uni-file-picker 拍摄从相册选择 uni.uploadFile H5上传图片 微信小程序上传图片 AD 域管理 人工智能生成内容 openstack Xen TCP协议 沙盒 抗锯齿 rtsp服务器 rtsp server android rtsp服务 安卓rtsp服务器 移动端rtsp服务 大牛直播SDK 计算虚拟化 弹性裸金属 多路转接 Logstash 日志采集 阻塞队列 生产者消费者模型 服务器崩坏原因 grub 版本升级 扩容 游戏开发 stable diffusion ranger MySQL8.0 大模型推理 zerotier NFC 近场通讯 智能门锁 搜狗输入法 中文输入法 CPU 使用率 系统监控工具 linux 命令 存储维护 NetApp存储 EMC存储 Tabs组件 TabContent TabBar TabsController 导航页签栏 滚动导航栏 SVN Server tortoise svn js HAProxy ABAP 底层实现 laravel 高德地图 鸿蒙接入高德地图 HarmonyOS5.0 es6 qt6.3 g726 西门子PLC 通讯 联机 僵尸毁灭工程 游戏联机 开服 vite autodl ECT转485串口服务器 ECT转Modbus485协议 ECT转Modbus串口服务器 AI Agent 字节智能运维 接口优化 跨平台 mysql安装报错 windows拒绝安装 蓝桥杯C++组 负载测试 ardunio BLE 解决方案 AzureDataStudio Ardupilot Office 数字证书 签署证书 端口号 开放端口 访问列表 cmake 高效I/O 粘包问题 k8s部署 MySQL8.0 高可用集群(1主2从) mm-wiki搭建 linux搭建mm-wiki mm-wiki搭建与使用 mm-wiki使用 mm-wiki详解 服务器部署 本地拉取打包 lighttpd安装 Ubuntu配置 Windows安装 服务器优化 CNNs 图像分类 vmamba 小智 服务器正确解析请求体 csrutil mac恢复模式进入方法 恢复模式 显示器 ShapeFile GeoJSON 蓝牙 多产物 联网 easyconnect WINCC iNode Macos css3 yum换源 ufw UDP xfce scapy Pyppeteer Chatbox 桌面环境 带外管理 MobaXterm 流量运营 ArkTS 移动端开发 diskgenius macOS Apache Beam 批流统一 案例展示 数据分区 容错机制 Unity插件 iventoy VmWare OpenEuler 代码规范 yashandb EVE-NG shell脚本免交互 expect linux免交互 风扇控制软件 输入系统 用户管理 锁屏不生效 linuxdeployqt 打包部署程序 appimagetool ftp服务 文件上传 glm4 计算机科学与技术 iTerm2 录音麦克风权限判断检测 录音功能 录音文件mp3播放 小程序实现录音及播放功能 RecorderManager 解决录音报错播放没声音问题 deepseek-r1 大模型本地部署 笔灵AI AI工具 内网渗透 靶机渗透 VPN wireguard retry 重试机制 pyicu WireGuard 异地组网 分子对接 autodock mgltools PDB PubChem 大版本升 升级Ubuntu系统 Isaac Sim 虚拟仿真 环境搭建 Maven sublime text3 initramfs Linux内核 Grub 行情服务器 股票交易 速度慢 切换 股票量化接口 股票API接口 solidworks安装 管道 动静态库 错误代码2603 无网络连接 2603 电路仿真 multisim 硬件工程师 硬件工程师学习 电路图 电路分析 仪器仪表 umeditor粘贴word ueditor粘贴word ueditor复制word ueditor上传word图片 ueditor导入word ueditor导入pdf ueditor导入ppt GeneCards OMIM TTD 空间 查错 deepseak 豆包 KIMI 腾讯元宝 文件传输 实时内核 nohup后台启动 网络原理 大模型训练/推理 推理问题 mindie 弹性服务器 sudo原理 su切换 VMware Tools vmware tools安装 vmwaretools安装步骤 vmwaretools安装失败 vmware tool安装步骤 vm tools安装步骤 vm tools安装后不能拖 vmware tools安装步骤 fiddler VGG网络 卷积层 池化层 零售 服务器ssl异常解决 配置原理 chromium dpi 进程程序替换 execl函数 execv函数 execvp函数 execvpe函数 putenv函数 华为OD 可以组成网络的服务器 玩游戏 动态规划 进程间通信 智能体开发 beautifulsoup 终端工具 远程工具 Linux Vim ajax llamafactory 微调 充电桩平台 充电桩开源平台 电脑桌面出现linux图标 电脑桌面linux图标删除不了 电脑桌面Liunx图标删不掉 linux图标删不掉 工具分享 一切皆文件 openjdk gunicorn ubuntu安装 linux入门小白 免费 c/s autoware 跨域请求 Bug解决 Qt platform OpenCV 信息安全 桌面快捷方式 IPv6 IPv6测试 IPv6测速 IPv6检测 IPv6查询 PyQt PySide6 机械臂 env 变量 LVM lvresize 磁盘扩容 pvcreate SystemV nacos qps 高并发 servlet 终端 全文检索 图搜索算法 安全漏洞 archlinux kde plasma Xshell