最新资讯

  • 新手也能学会Reactor模式高并发服务器

新手也能学会Reactor模式高并发服务器

2026-01-29 01:26:44 栏目:最新资讯 4 阅读

一.基本步骤

以下是基于 Reactor 模式构建高并发网络服务器的极简核心步骤(适配你的 C++ 开发、CentOS7.9 虚拟机环境):
一、环境准备
部署 2 台 CentOS7.9 本地虚拟机,分别作为服务端 / 客户端;
安装 C++11+ 编译环境(yum install gcc-c++),确认 epoll 相关系统头文件(sys/epoll.h)可用。
二、核心组件开发(C++)
封装 Epoll 模块:实现 epoll_create/epoll_ctl/epoll_wait 封装,启用 ET 模式;
实现 EventLoop 事件循环:每个线程一个 EventLoop,负责监听 / 处理 epoll 事件;
封装 Channel 组件:绑定文件描述符(fd)与读写 / 关闭回调函数;
实现线程池:基于 pthread 封装,支持异步提交任务(如业务处理)。
三、网络层实现
封装非阻塞 Socket:实现 socket ()/bind ()/listen ()/accept () 非阻塞化改造;
实现 TCP 基础通信:服务端监听端口,处理客户端连接;客户端实现连接 / 报文发送逻辑;
解决核心网络问题:
用 “长度前缀” 协议解析 TCP 粘包;
基于 timerfd 实现连接超时管理(阈值 60s)。
四、架构整合(主从 Reactor)
主 Reactor:主线程的 EventLoop 监听 listenfd,接收新连接;
从 Reactor:将新连接分发至子线程的 EventLoop,由从 Reactor 处理读写事件;
任务异步化:将耗时业务逻辑提交至线程池,避免阻塞 IO 线程。
五、编译与基础调试
编写 Makefile 编译代码,链接 pthread 线程库;
本地启动服务端,客户端测试基础连接 / 报文收发功能,排查核心逻辑 bug。
六、性能优化
系统内核调优:调整 net.core.somaxconn、tcp_max_syn_backlog 等参数,提升并发连接上限;
代码优化:减少锁竞争、优化内存复用,确保非阻塞 IO 高效执行。
七、压测验证
编写 shell 脚本:批量创建客户端连接,模拟高并发场景;
用 nc+date 统计响应时间,脚本统计并发连接数 / QPS,验证 1800+ 并发、8.8 万 QPS、22ms 响应的性能指标。

1.客户端源码

1.客户端源码

// 网络通讯的客户端程序。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

int main(int argc, char *argv[])
{
    if (argc != 3)
    {
        printf("usage:./client ip port "); return -1;
    }

    int sockfd;
    struct sockaddr_in servaddr;
    char buf[1024];
 
    if ((sockfd=socket(AF_INET,SOCK_STREAM,0))<0) { printf("socket() failed. "); return -1; }

    memset(&servaddr,0,sizeof(servaddr));
    servaddr.sin_family=AF_INET;
    servaddr.sin_port=htons(atoi(argv[2]));
    servaddr.sin_addr.s_addr=inet_addr(argv[1]);

    if (connect(sockfd, (struct sockaddr *)&servaddr,sizeof(servaddr)) != 0)
    {    if(errno!=EINPROGRESS)
         {
             printf("connect(%s:%s) failed. ",argv[1],argv[2]); close(sockfd);  return -1;
         }
    }
     printf("connect ok. ");
     printf("开始时间:%d ",time(0));
   // sleep(1000);
   
 for (int ii=0;ii<100000;ii++)
{
    memset(buf,0,sizeof(buf));
    sprintf(buf,"这是第%d个超级女生。 ",ii);

    char tmpbuf[1024];        // 临时的buffer,报文头部+报文内容。
    memset(tmpbuf,0,sizeof(tmpbuf));
    int len=strlen(buf);      // 计算报文的大小。
    memcpy(tmpbuf,&len,4);    // 拼接报文头部。
    memcpy(tmpbuf+4,buf,len); // 拼接报文内容。

    send(sockfd,tmpbuf,len+4,0); // 把请求报文发送给服务端。

    recv(sockfd,&len,4,0);       // 先读取4字节的报文头部。

    memset(buf,0,sizeof(buf));
    recv(sockfd,buf,len,0);      // 读取报文内容。

    //printf("recv:%s ",buf);
}
   /*
    for (int ii=0;ii<10;ii++)
    {
     memset(buf,0,sizeof(buf));
     sprintf(buf,"这是第%d个超级女生。 ",ii);
 
     send(sockfd,buf,strlen(buf),0); // 把请求报文发送给服务端。
                                    // (size 1)1024UL
     memset(buf,0,sizeof(buf));
     recv(sockfd,buf,1024,0);        // 读取报文内容。

     printf("recv:%s ",buf);
     sleep(1);
    }
    */
   // sleep(100);
    printf("结束时间:%d",time(0));
}
 

2.服务端源码

2.服务端源码


#include"EchoServer.h"
#include
#include

// 1、设置2和15的信号。
// 2、在信号处理函数中停止主从事件循环和工作线程。
// 3、服务程序主动退出。

EchoServer *echoserver;               //信号处理函数无法直接访问局部变量,因此用全局变量

void Stop(int sig) // 信号2和15的处理函数,功能是停止服务程序。
{
  printf("sig=%d ",sig);
  //调用EchoServer::Stop()停止服务。
  echoserver->Stop();
  printf("echoserver已停止。 ");
  delete echoserver;
  printf("delete echoserver。 ");
  exit(0);
}

int main(int argc,char *argv[])
{
  /*这里检查主程序的入口参数是否合法*/
  if(argc != 3) {
    std::cout<<"请输入./reactor ip地址 端口号"<     return -1;
  }
  signal(SIGTERM,Stop); // 信号15,系统kill或killall命令默认发送的信号。
  signal(SIGINT,Stop); // 信号2,按Ctrl+C发送的信号。

  echoserver = new EchoServer (argv[1],atoi(argv[2]),3,0);
  echoserver->Start();
 // delete echoserver;
  
  return 0;
}
 

2.1 socket类

#include"Socket.h"
#include
#include
#include

Socket::Socket(int fd):fd_(fd) //传入一个准备好的fd
{

}     
Socket::~Socket()              //关闭fd_
{
    ::close(fd_);
}

int createnonblocking()
{
    int listensock = socket(AF_INET,SOCK_STREAM|SOCK_NONBLOCK,IPPROTO_TCP);
    if(listensock < 0) {
     //perror("socket");exit(-1);
     printf("%s:%s:%d listen socket create error:%d ", __FILE__, __FUNCTION__, __LINE__, errno); exit(-1);
    }
    return listensock;
}
int Socket::fd()const      //返回fd_成员
{
    return fd_;
}
std::string Socket::ip()const      //返回ip_成员
{
    return ip_;
}
uint16_t Socket::port()const      //返回port_成员
{
    return port_;
}

void Socket::setreuseaddr(bool on)    // 设置SO_REUSEADDR选项,true-打开,false-关闭。
{
    int  optval = on ? 1:0;
     // 设置SO_REUSEADDR选项,允许地址重用,解决服务器重启时地址已占用问题
    setsockopt(fd_, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)); 
}   
void Socket::setreuseport(bool on)    // 设置SO_REUSEPORT选项。
{
    int  optval = on ? 1:0;
     // 设置SO_REUSEPORT选项,允许多个套接字绑定到同一端口,提升服务器并发能力
    setsockopt(fd_, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof(optval)); 
}
void Socket::settcpnodelay(bool on)   // 设置TCP_NODELAY选项。
{
    int  optval = on ? 1:0;
    // 设置TCP_NODELAY选项,禁用Nagle算法,使数据立即发送,降低交互延迟
    ::setsockopt(fd_,IPPROTO_TCP, TCP_NODELAY, &optval, sizeof(optval));
}   
void Socket::setkeepalive(bool on)    // 设置SO_KEEPALIVE选项。
{
    int  optval = on ? 1:0;
    // 设置SO_KEEPALIVE选项,启用保活机制,定期检测连接是否存活
     setsockopt(fd_, SOL_SOCKET, SO_KEEPALIVE, &optval, sizeof(optval)); 
}

void Socket::bind(const InetAddress& servaddr)    // 服务端的socket将调用此函数。
{
    if(::bind(fd_, servaddr.addr(),sizeof(servaddr)) < 0 )
    {
     perror("bind");
     close(fd_);
     exit(-1);
    }
    setipport(servaddr.ip(),servaddr.port());
}

void Socket::setipport(const std::string &ip,uint16_t port)        //设置ip和port成员
{
    ip_=ip;
    port_=port;
}

void Socket::listen(int nn)                   // 服务端的socket将调用此函数。
{
    if(::listen(fd_,nn) != 0)
    {
     perror("listen");
     close(fd_);
     exit(-1);
    }
}
int Socket::accept(InetAddress& clientaddr)      // 客户端的socket将调用此函数。
{
    struct sockaddr_in peeraddr;
    socklen_t len = sizeof(peeraddr);
    int clientsock = accept4(fd_,(struct sockaddr*)&peeraddr,&len,SOCK_NONBLOCK);         
    clientaddr.setaddr(peeraddr);    //客户端的地址和协议

    return clientsock;
}
 

2.2 Inetserveraddr类

#include"InetAddress.h"

InetAddress::InetAddress()
{

}

InetAddress::InetAddress(const std::string &ip,uint16_t port)
{
   addr_.sin_family = AF_INET;
   addr_.sin_addr.s_addr = inet_addr(ip.c_str());//接受所有地址的连接
   addr_.sin_port = htons(port);
}

 InetAddress::InetAddress(const sockaddr_in addr):addr_(addr)
{

}
InetAddress::~InetAddress()
{

}
const char*InetAddress::ip()const            //返回字符串表示的ip
{
  return  inet_ntoa(addr_.sin_addr);         //inet_ntoa()的返回值解释const char *
}
uint16_t InetAddress::port()const            //返回整数表示的端口
{
  return ntohs(addr_.sin_port);
}
const sockaddr*InetAddress::addr()const      //返回addr_成员的地址,转换成了sockaddr
{
  return (sockaddr*)&addr_;
}
 void InetAddress::setaddr(sockaddr_in clientaddr) //设置addr_成员的值
 {
  addr_ = clientaddr;
 }

2.3 Connection类

#include"Connection.h"

Connection::Connection(EventLoop *loop, std::unique_ptrclientsock)
           :loop_(loop),clientsock_(std::move(clientsock)),disconnect_(false),clientchannel_(new Channel(loop_,clientsock_->fd()))
{
  //clientchannel_=new Channel(loop_,clientsock_->fd());
  clientchannel_->setreadcallback(std::bind(&Connection::onmessage,this));
  clientchannel_->setclosecallback(std::bind(&Connection::closecallback,this));
  clientchannel_->seterrorcallback(std::bind(&Connection::errorcallback,this));
  clientchannel_->setwritecallback(std::bind(&Connection::writecallback,this));

  clientchannel_->useet();              //客户端连上来采用边缘触发
  clientchannel_->enablereading();      //让epoll_wait()监视clientchannel的读事件
}
Connection::~Connection()
{
  //printf("conn已析构。 ");
}
///////////////////////////////////////////////////////////////////////////////////////
int Connection::fd()const           //返回fd_成员
{
  return clientsock_->fd();
}
std::string Connection::ip() const  //返回ip_成员
{
  return clientsock_->ip();
}
uint16_t Connection::port() const   //返回port_成员
{
  return clientsock_->port();
}
void Connection::closecallback()                // TCP连接关闭(断开)的回调函数,供Channel回调。
{
  disconnect_=true;
  clientchannel_->remove();           //从事件循环中删除Channel。
  closecallback_(shared_from_this());
}
void Connection::errorcallback()                // TCP连接错误的回调函数,供Channel回调。
{
  disconnect_=true;
  clientchannel_->remove();           //从事件循环中删除Channel。
  errorcallback_(shared_from_this()); //回调TcpServer::errorconnection()。
}
//////////////////////////////////////////////////////////////////////////////////////
void Connection::setonmessagecallback(std::function fn) // 设置处理报文的回调函数。
{
  onmessagecallback_=fn;
}

void Connection::setclosecallback(std::function fn)                 // 设置关闭fd_的回调函数。
{
  closecallback_ = fn;
}
void Connection::seterrorcallback(std::function fn)                 // 设置fd_发生了错误的回调函数。
{
  errorcallback_ = fn;
}
void Connection::setsendcompletecallback(std::functionfn)           //发送数据完成后的回调函数。
{
  sendcompletecallback_=fn;
}

void Connection::onmessage()                                                           //处理对端发过来的信息
{
  char buffer[1024];
  while (true)          // 由于使用非阻塞IO,一次读取buffer大小数据,直到全部的数据读取完毕。
  {
    bzero(&buffer, sizeof(buffer));
    ssize_t nread = read(fd(), buffer, sizeof(buffer));
    if (nread > 0)    // 成功的读取到了数据。
    {
     
      inputbuffer_.append(buffer,nread);      //把读取到的数据追加到接收缓冲区中
    }
    else if (nread == -1 && errno == EINTR) // 读取数据的时候被信号中断,继续读取。
    {
      continue;
    }
    else if (nread == -1 && ((errno == EAGAIN) || (errno == EWOULDBLOCK))) // 全部的数据已读取完毕。
    {
      std::string message;
      while(true)                 //从接收缓冲区中拆分出客户端的请求消息。
      {

        if (inputbuffer_.pickmessage(message)==false) break;
        lastatime_=Timestamp::now();        // 更新Connection的时间戳。
        //std::cout << "lastatime=" << lastatime_.tostring() << std::endl;

        onmessagecallback_(shared_from_this(),message);          //回调TcpServer::onmessage()
      }

      break;
      
    }
      else if(nread == 0)
    {
      closecallback();           //回调TcpServer::closecallback()
      break;
    }
  }            
}
void Connection::send(const char*data,size_t size)          // 发送数据,不管在任何线程中,都是调用此函数发送数据。
{
  if(disconnect_==true){printf("客户端连接已断开了,send()直接返回。 "); return;}

  // 因为数据要发送给其它线程处理,所以,把它包装成智能指针。
  std::shared_ptr message(new std::string(data));

  if(loop_->isinloopthread())       //判断当前线程是否为事件循环线程(IO线程)
  {
    //如果当前线程是IO线程,直接调用sendinloop()发送数据。
    //printf("send()在事件循环的线程中。 ");
    sendinloop(message);
  }else
  {
    //如果当前线程不是IO线程,调用EventLoop::queueinloop(),把sendinloop()交给事件循环线程去执行
    //printf("send()不在事件循环的线程中。 ");
    loop_->queueinloop(std::bind(&Connection::sendinloop,this,message));
  }

}

// 发送数据,如果当前线程是IO线程,直接调用此函数,如果是工作线程,将把此函数传给IO线程。
void Connection::sendinloop(std::shared_ptrdata)
{
  outputbuffer_.appendwithsep(data->data(),data->size());    //把需要发送的数据保存到Connection的发送缓冲区中。
  clientchannel_->enablewriting();    //注册写事件。
  writecallback();                     // 手动触发写操作(适配ET模式)
}


void Connection::writecallback()                                                       //处理写事件的回调函数,供Channel回调。
{
  int writen=::send(fd(),outputbuffer_.data(),outputbuffer_.size(),0); //尝试把outputbuffer_中的数据全部发送出去。
  //printf("writecallback: writen=%d, errno=%d ", writen, errno);     // 确认发送长度
  if (writen>0) outputbuffer_.erase(0,writen);                         //从outputbuffer中删除已成功发送的字节数。

  //如果发送缓冲区中没有数据了,表示数据已发送成功,不再关注写事件
  if (outputbuffer_.size()==0) 
  {
    clientchannel_->disablewriting();
    sendcompletecallback_(shared_from_this());
  }
}

bool Connection::timeout(time_t now,int val)              //判断TCP连接是否超时(空闲太久)
{
  return now-lastatime_.toint()>val;
}

注:(需要其他源代码可以联系我)

三.性能测试

1.qps

同时运行30台客户端,每台发送10万个报文,用总报文除以时间(些许误差是正常的)

2.并发数

运行shell脚本

shell源代码:

#!/bin/bash
set -eo pipefail

# 配置项
SERVER_IP="192.168.211.134"
SERVER_PORT=5007
START_CONN=1000
STEP_CONN=1000
MAX_CONN=50000
PID_FILE="./conn_pids.txt"
LOG_FILE="./conn_test.log"
NC_CMD="ncat"
DELAY_PER_CONN=0.01

# 前置检查
pre_check() {
    for cmd in $NC_CMD ss bc grep; do
        command -v $cmd &> /dev/null || { echo "请安装$cmd"; exit 1; }
    done
    rm -f $PID_FILE $LOG_FILE
    echo "【前置检查】依赖已就绪" | tee -a $LOG_FILE
}

# 建立长连接(简化,确保不退出)
create_conn() {
    local conn_id=$1
    # 用ncat后台挂起,直接sleep维持连接(避免-e参数兼容性问题)
    nohup $NC_CMD $SERVER_IP $SERVER_PORT > /dev/null 2>&1 &
    echo $! >> $PID_FILE
    [ $((conn_id%1000)) -eq 0 ] && echo "已发起${conn_id}个连接" | tee -a $LOG_FILE
    sleep $DELAY_PER_CONN
}

# 统计存活连接(修复grep选项问题)
count_alive_conn() {
    # 用引号包裹匹配串,避免“-”被识别为选项
    alive_conn=$(ss -ant | grep " ${SERVER_IP}:${SERVER_PORT} " | wc -l)
    echo ${alive_conn:-0}
}

# 主测试
main_test() {
    for ((conn=START_CONN; conn<=MAX_CONN; conn+=STEP_CONN)); do
        echo -e " 【测试】尝试建立${conn}个连接" | tee -a $LOG_FILE
        for ((i=1; i<=STEP_CONN; i++)); do
            create_conn $((conn-STEP_CONN+i))
        done
        sleep 5

        alive_conn=$(count_alive_conn)
        success_rate=$(echo "scale=2; $alive_conn/$conn*100" | bc -l)
        echo "【结果】存活数:${alive_conn} | 成功率:${success_rate}%" | tee -a $LOG_FILE

        [ $(echo "$success_rate<95" | bc -l) -eq 1 ] && { echo "最大连接数:$((conn-STEP_CONN))"; break; }
        sleep 30
    done
}

# 清理
cleanup() {
    pkill -f "$NC_CMD $SERVER_IP $SERVER_PORT"
    rm -f $PID_FILE
    echo "【清理】完成" | tee -a $LOG_FILE
}

pre_check
main_test
cleanup
echo "日志: $LOG_FILE"

3.延迟

cn|data的方法,简单高效,多次测试取平均值

本文地址:https://www.yitenyun.com/1068.html

搜索文章

Tags

#远程工作 #服务器 #python #pip #conda #ios面试 #ios弱网 #断点续传 #ios开发 #objective-c #ios #ios缓存 香港站群服务器 多IP服务器 香港站群 站群服务器 #kubernetes #笔记 #平面 #容器 #linux #学习方法 #运维 #Trae #IDE #AI 原生集成开发环境 #Trae AI #学习 #物联网 #websocket #进程控制 #开发语言 #云原生 #iventoy #VmWare #OpenEuler #docker #后端 #数据库 #人工智能 #node.js #cpolar #fastapi #html #css #MobaXterm #ubuntu #数信院生信服务器 #Rstudio #生信入门 #生信云服务器 #内网穿透 #网络 #低代码 #爬虫 #音视频 #Conda # 私有索引 # 包管理 #算法 #大数据 #unity #c# #游戏引擎 #github #git #分阶段策略 #模型协议 #缓存 #vscode #mobaxterm #深度学习 #计算机视觉 #RTP over RTSP #RTP over TCP #RTSP服务器 #RTP #TCP发送RTP #web安全 #安全 #kylin #nginx #tcp/ip #开源 #vllm #大模型 #Streamlit #Qwen #本地部署 #AI聊天机器人 #golang #java #redis #jvm #我的世界 #hadoop #hbase #hive #zookeeper #spark #kafka #flink #android #腾讯云 #需求分析 #Dell #PowerEdge620 #内存 #硬盘 #RAID5 #centos #华为 #ModelEngine #银河麒麟 #系统升级 #信创 #国产化 #多个客户端访问 #IO多路复用 #回显服务器 #TCP相关API #ide #AI编程 #gpu算力 #ssh #编辑器 #c++ #计算机网络 #研发管理 #禅道 #禅道云端部署 #http #性能优化 #qt #C++ #凤希AI伴侣 #云计算 #udp #银河麒麟高级服务器操作系统安装 #银河麒麟高级服务器V11配置 #设置基础软件仓库时出错 #银河麒高级服务器系统的实操教程 #生产级部署银河麒麟服务系统教程 #Linux系统的快速上手教程 #json #课程设计 #科技 #自然语言处理 #神经网络 #电脑 #自动化 #jmeter #功能测试 #软件测试 #自动化测试 #职场和发展 #prometheus #grafana #FTP服务器 #ping通服务器 #读不了内网数据库 #bug菌问答团队 #架构 #asp.net #面试 #fiddler #华为云 #部署上线 #动静分离 #Nginx #新人首发 #1024程序员节 #mvp #个人开发 #设计模式 #mysql #DisM++ # GLM-4.6V # 系统维护 #金融 #mcp #金融投资Agent #Agent #AIGC #ida #elasticsearch #版本控制 #Git入门 #开发工具 #代码托管 #制造 #个人博客 #windows #n8n #毕设 #RAID #RAID技术 #磁盘 #存储 #嵌入式编译 #ccache #distcc #vue.js #前端 #ollama #ai #llm #游戏 #智能路由器 #php #django #RustDesk #IndexTTS 2.0 #本地化部署 #oracle #SA-PEKS # 关键词猜测攻击 # 盲签名 # 限速机制 #树莓派4b安装系统 #毕业设计 #车辆排放 #Spring AI #MCP服务器 #STDIO协议 #Streamable-HTTP #McpTool注解 #服务器能力 #Android #Bluedroid #时序数据库 #我的世界服务器搭建 #minecraft #智能手机 #Ansible #Playbook #AI服务器 #AI #大模型学习 #javascript #压力测试 #openlayers #bmap #tile #server #vue #c语言 #网络协议 #eBPF #Harbor #stm32 #todesk #asp.net大文件上传 #asp.net大文件上传下载 #asp.net大文件上传源码 #ASP.NET断点续传 #asp.net上传文件夹 #uni-app #小程序 #notepad++ #信令服务器 #Janus #MediaSoup #jenkins #jar #flutter #数码相机 #SSH #X11转发 #Miniconda #debian #改行学it #创业创新 #程序员创富 #sqlserver #MC #flask #流媒体 #NAS #飞牛NAS #监控 #NVR #EasyNVR #cpp #项目 #高并发 #claude #企业开发 #ERP #项目实践 #.NET开发 #C#编程 #编程与数学 #arm开发 #gemini #gemini国内访问 #gemini api #gemini中转搭建 #Cloudflare #screen 命令 #东方仙盟 #阿里云 #远程桌面 #远程控制 #API限流 # 频率限制 # 令牌桶算法 #游戏机 #JumpServer #堡垒机 #iBMC #UltraISO #黑群晖 #虚拟机 #无U盘 #纯小白 #支付 #bash #蓝湖 #Axure原型发布 #振镜 #振镜焊接 #teamviewer #ci/cd #gitlab #单元测试 #集成测试 #嵌入式硬件 #网络安全 #YOLO # Triton # 目标检测 #pycharm #llama #opencv #语言模型 #lua #语音识别 #测试工具 #uv #uvx #uv pip #npx #Ruff #pytest #京东云 #web server #请求处理流程 #DeepSeek #MCP #蓝耘智算 #SRS #直播 #数据结构 #910B #昇腾 #milvus #springboot #知识库 #spring boot #搜索引擎 #aws #MQTT协议 #pytorch #react.js #分布式 #深度优先 #DFS #单片机 #svn #rocketmq #测试用例 #selenium #守护进程 #复用 #screen #系统架构 #apache #tomcat # 双因素认证 # TensorFlow #Clawdbot #个人助理 #数字员工 #tensorflow #arm #rustdesk #p2p #postgresql #连接数据库报错 #YOLOFuse # Base64编码 # 多模态检测 #微信小程序 #源码 #闲置物品交易系统 #umeditor粘贴word #ueditor粘贴word #ueditor复制word #ueditor上传word图片 #进程 #操作系统 #进程创建与终止 #shell #IPv6 #DNS #unity3d #服务器框架 #Fantasy #SPA #单页应用 #web3.py #YOLOv8 # Docker镜像 #swagger #visual studio code #微服务 #java-ee #transformer #prompt #麒麟OS #计算机 #mamba #jupyter #PyTorch # 高并发部署 #journalctl #epoll #sqlite #webpack #openresty #wordpress #雨云 #AI论文写作工具 #学术写作辅助 #论文创作效率提升 #AI写论文实测 #电气工程 #C# #PLC #sql #spring #maven #intellij-idea #libosinfo #ssl #vuejs #TCP #客户端 #嵌入式 #DIY机器人工房 #说话人验证 #声纹识别 #CAM++ #windows11 #microsoft #系统修复 #高级IO #select #ansible #chatgpt #Windows #gitea #macos #视频去字幕 #网站 #截图工具 #批量处理图片 #图片格式转换 #图片裁剪 #万悟 #联通元景 #智能体 #镜像 #scala #webrtc #idm #微信 #健身房预约系统 #健身房管理系统 #健身管理系统 #mcu #SSE # AI翻译机 # 实时翻译 #聊天小程序 #北京百思可瑞教育 #百思可瑞教育 #北京百思教育 #算力一体机 #ai算力服务器 #无人机 #Deepoc #具身模型 #开发板 #未来 #鸭科夫 #逃离鸭科夫 #鸭科夫联机 #鸭科夫异地联机 #开服 #risc-v #NFC #智能公交 #服务器计费 #数据挖掘 #FP-增长 #deepseek #tdengine #涛思数据 #交互 #SSH公钥认证 # PyTorch # 安全加固 #Proxmox VE #虚拟化 #VMware #CUDA #Triton #部署 #昇腾300I DUO #GPU服务器 #8U #硬件架构 #NPU #CANN #cosmic #1panel #vmware #运维开发 #H5 #跨域 #发布上线后跨域报错 #请求接口跨域问题解决 #跨域请求代理配置 #request浏览器跨域 #漏洞 #WT-2026-0001 #QVD-2026-4572 #smartermail #银河麒麟操作系统 #openssh #华为交换机 #信创终端 #飞牛nas #fnos #UDP的API使用 #处理器 #Linux #系统管理 #服务 #智能体来了 #智能体对传统行业冲击 #行业转型 #AI赋能 #Modbus-TCP #ShaderGraph #图形 #管道Pipe #system V #Socket网络编程 #VMware Workstation16 #服务器操作系统 #RAG #LLM #chat #硬件工程 #YOLO26 #目标检测 #muduo #TcpServer #accept #高并发服务器 #SAP #ebs #metaerp #oracle ebs #muduo库 #远程开发 # 高并发 #经验分享 #postman #国产化OS #能源 #计算几何 #斜率 #方向归一化 #叉积 # Miniconda # 批量管理 #扩展屏应用开发 #android runtime #chrome #Anaconda配置云虚拟环境 #微PE #硬盘克隆 #DiskGenius #媒体 #C语言 #vivado license #机器学习 #交通物流 #html5 #政务 #手机h5网页浏览器 #安卓app #苹果ios APP #手机电脑开启摄像头并排查 #fabric #密码学 #可信计算技术 #IO #openHiTLS #TLCP #DTLCP #商用密码算法 #laravel #harmonyos #ArkUI #ArkTS #鸿蒙开发 #学术论文创作 #论文效率提升 #MBA论文写作 #Nacos #web #服务器繁忙 #CPU #go #测评 #CCE #Dify-LLM #Flexus #cursor #puppeteer #KMS #slmgr #推荐算法 #智能家居 #系统安全 #POC #问答 #交付 #mybatis #xlwings #Excel #spine #浏览器自动化 #python #翻译 #bootstrap #spring cloud #nfs #iscsi #信息与通信 #信号处理 #tcpdump #embedding #文件管理 #文件服务器 #jetty #前端框架 #负载均衡 #kmeans #聚类 #文件IO #输入输出流 #统信UOS #win10 #qemu #ms-swift # 大模型 # 模型训练 #Java #scanf #printf #getchar #putchar #cin #cout #大语言模型 #程序员 #Smokeping #pve #LangGraph #CLI #Python #JavaScript #langgraph.json #langchain #paddleocr #企业级存储 #网络设备 #工具集 #ddos #vps #大模型应用 #API调用 #PyInstaller打包运行 #服务端部署 #win11 #排序算法 #jdk #排序 #zotero #WebDAV #同步失败 #代理模式 #aiohttp #asyncio #异步 #数据仓库 #软件 #本地生活 #电商系统 #商城 #安卓 #openEuler #欧拉 #.netcore #https #LoRA # lora-scripts # 模型微调 #麒麟 #实时音视频 #业界资讯 # IndexTTS 2.0 # 自动化运维 #SSH保活 #rdp #海外服务器安装宝塔面板 #Host #渗透测试 #SSRF #大模型部署 #mindie #大模型推理 #大模型开发 #Go并发 #高并发架构 #Goroutine #系统设计 #Dify #ARM架构 #鲲鹏 #.net #net core #kestrel #web-server #asp.net-core #ui #分类 #数据分析 #SSH反向隧道 # Jupyter远程访问 #简单数论 #埃氏筛法 #集成学习 #serverless #EMC存储 #存储维护 #NetApp存储 #mongodb #yum #uvicorn #uvloop #asgi #event #codex #rtsp #转发 #PTP_1588 #gPTP #Termux #Samba #三维 #3D #三维重建 #fpga开发 #neo4j #NoSQL #SQL #Llama-Factory # 大模型推理 #rust #CVE-2025-61686 #路径遍历高危漏洞 #鸿蒙PC #GPU #AutoDL ##租显卡 #进程等待 #wait #waitpid #pdf #大模型教程 #AI大模型 #结构体 #Android16 #音频性能实战 #音频进阶 #web服务器 #esp32教程 # GPU租赁 # 自建服务器 #H5网页 #网页白屏 #H5页面空白 #资源加载问题 #打包部署后网页打不开 #HBuilderX #CTF #MinIO服务器启动与配置详解 #VMWare Tool #r-tree #arm64 #cesium #可视化 #心理健康服务平台 #心理健康系统 #心理服务平台 #心理健康小程序 #DHCP #青少年编程 #agent #ai大模型 #插件 #开源软件 #串口服务器 #Modbus #MOXA #GATT服务器 #蓝牙低功耗 #散列表 #哈希算法 #adb #硬件 #论文笔记 #链表 #链表的销毁 #链表的排序 #链表倒置 #判断链表是否有环 #PowerBI #企业 #idea #intellij idea #reactjs #web3 #dify #googlecloud #vnstat #5G #文心一言 #AI智能体 #memcache #大剑师 #nodejs面试题 #攻防演练 #Java web #红队 #C2000 #TI #实时控制MCU #AI服务器电源 #leetcode # 树莓派 # ARM架构 #GB28181 #SIP信令 #SpringBoot #视频监控 #SSH跳板机 # Python3.11 #HeyGem # WebUI # 网络延迟 #LVDS #高速ADC #DDR #ranger #MySQL8.0 #驱动开发 #word #ESP32 # OTA升级 # 黄山派 #ansys #ansys问题解决办法 #Gunicorn #WSGI #Flask #并发模型 #容器化 #性能调优 #mariadb #模型上下文协议 #MultiServerMCPC #load_mcp_tools #load_mcp_prompt #Emby #视频 #screen命令 #ambari #雨云服务器 #Minecraft服务器 #教程 #MCSM面板 #门禁 #梯控 #智能一卡通 #门禁一卡通 #消费一卡通 #智能梯控 #一卡通 #源代码管理 #超时设置 #客户端/服务器 #网络编程 #挖矿 #Linux病毒 #ai编程 #elk #sql注入 #机器人 #azure #MS #Materials #鸿蒙 #数据恢复 #视频恢复 #视频修复 #RAID5恢复 #流媒体服务器恢复 # 服务器配置 # GPU #AI-native #框架搭建 #状态模式 #dba #Tokio #react native #Gateway #认证服务器集成详解 #工程设计 #预混 #扩散 #燃烧知识 #层流 #湍流 #RSO #机器人操作系统 #WinSCP 下载安装教程 #SFTP #FTP工具 #服务器文件传输 #excel #ASR #SenseVoice #星图GPU # CosyVoice3 # 批量部署 #glibc #copilot #中间件 # TTS服务器 # 键鼠锁定 #远程连接 #CVE-2025-68143 #CVE-2025-68144 #CVE-2025-68145 #ue5 #zabbix #node #bond #服务器链路聚合 #网卡绑定 #VS Code调试配置 #证书 #winscp #scrapy #AI写作 #ONLYOFFICE #MCP 服务器 #后端框架 # 数字人系统 # 远程部署 #参数估计 #矩估计 #概率论 #蓝牙 #LE Audio #BAP #powerbi #Node.js # child_process #scikit-learn #随机森林 #运维工具 #安全威胁分析 #网络攻击模型 #log #pyqt #仙盟创梦IDE #GLM-4.6V-Flash-WEB # AI视觉 # 本地部署 #动态规划 #dlms #dlms协议 #逻辑设备 #逻辑设置间权限 #agi #3d #ipmitool #BMC # 黑屏模式 #信息可视化 #claude code #code cli #ccusage #C #Minecraft #PaperMC #我的世界服务器 #STDIO传输 #SSE传输 #WebMVC #WebFlux #企业微信 #IndexTTS2 # 阿里云安骑士 # 木马查杀 #SSH免密登录 # CUDA #kong #Kong Audio #Kong Audio3 #KongAudio3 #空音3 #空音 #中国民乐 #Spring AOP #程序人生 #小艺 #搜索 #人大金仓 #Kingbase #ARM服务器 # 多模态推理 #多模态 #微调 #超参 #LLamafactory #RK3576 #瑞芯微 #硬件设计 #wsl #产品经理 #就业 #多进程 #python技巧 #CMake #Make #C/C++ #Java程序员 #Java面试 #后端开发 #Spring源码 #Spring #raid #raid阵列 #国产操作系统 #V11 #kylinos #KMS激活 #numpy #CSDN #Langchain-Chatchat # 国产化服务器 # 信创 #论文阅读 #软件工程 #database #儿童AI #图像生成 #pjsip #LobeChat #vLLM #GPU加速 #数字化转型 #实体经济 #商业模式 #软件开发 #数智红包 #商业变革 #创业干货 #人脸识别sdk #视频编解码 #人脸识别 #开源工具 #FASTMCP #n8n解惑 #nas #Tracker 服务器 #响应最快 #torrent 下载 #2026年 #Aria2 可用 #迅雷可用 #BT工具通用 #Zabbix #CosyVoice3 #语音合成 #ZooKeeper #ZooKeeper面试题 #面试宝典 #深入解析 #高斯溅射 # 语音合成 #产品运营 #模拟退火算法 #Puppet # IndexTTS2 # TTS #联机教程 #局域网联机 #局域网联机教程 #局域网游戏 #es安装 #广播 #组播 #并发服务器 #x86_64 #数字人系统 #云服务器 #个人电脑 #MC群组服务器 #homelab #Lattepanda #Jellyfin #Plex #Kodi #yolov12 #研究生life #模型训练 #eureka #其他 #unix #编程 #c++高并发 #百万并发 # REST API # GLM-4.6V-Flash-WEB #CS2 #debian13 # keep-alive #gpu #nvcc #cuda #nvidia #RXT4090显卡 #RTX4090 #深度学习服务器 #硬件选型 #信创国产化 #达梦数据库 #SQL注入主机 #uip #k8s # 服务器IP # 端口7860 #树莓派 #温湿度监控 #WhatsApp通知 #IoT #MySQL #echarts #Kylin-Server #服务器安装 #devops #模版 #函数 #类 #笔试 #戴尔服务器 #戴尔730 #装系统 #OPCUA #junit #SMTP # 内容安全 # Qwen3Guard #ThingsBoard MCP #黑客技术 #文件上传漏洞 #LangFlow # 智能运维 # 性能瓶颈分析 #代理 # 服务器IP访问 # 端口映射 #平板 #零售 #智能硬件 #vncdotool #链接VNC服务器 #如何隐藏光标 #遛狗 #bug #A2A #GenAI #clickhouse #FHSS #diskinfo # 磁盘健康 #流量监控 #自动化运维 #服务器解析漏洞 #nodejs #CPU利用率 #数据安全 #注入漏洞 #算力建设 #wpf # 一锤定音 # 大模型微调 #ffmpeg # ControlMaster #SSH密钥 #练习 #基础练习 #数组 #循环 #九九乘法表 #计算机实现 #dynadot #域名 #ETL管道 #向量存储 #数据预处理 #DocumentReader # RTX 3090 #esb接口 #走处理类报异常 #le audio #低功耗音频 #通信 #连接 # 自动化部署 # VibeThinker #Aluminium #Google #网路编程 #smtp #smtp服务器 #PHP #银河麒麟部署 #银河麒麟部署文档 #银河麒麟linux #银河麒麟linux部署教程 #Qwen3-14B # 大模型部署 # 私有化AI #AI技术 #vp9 #AI 推理 #NV #ServBay # GLM-TTS # 数据安全 #远程软件 #xshell #host key #TTS私有化 # IndexTTS # 音色克隆 #内网 # 跳板机 #指针 #anaconda #虚拟环境 #编程助手 #blender #设计师 #图像处理 #游戏美术 #技术美术 #分布式数据库 #集中式数据库 #业务需求 #选型误 # Connection refused #ip #代理服务器 #rsync # 数据同步 # ARM服务器 #Apple AI #Apple 人工智能 #FoundationModel #Summarize #SwiftUI #多线程 #turn #网安应急响应 #claudeCode #content7 #跳槽 #工作 # GLM # 服务连通性 #odoo #HarmonyOS #ceph # 串口服务器 # NPort5630 #appche #服务器开启 TLS v1.2 #IISCrypto 使用教程 #TLS 协议配置 #IIS 安全设置 #服务器运维工具 #uniapp #合法域名校验出错 #服务器域名配置不生效 #request域名配置 #已经配置好了但还是报错 #uniapp微信小程序 #ftp #sftp #华为od #华为机试 #YOLO识别 #YOLO环境搭建Windows #YOLO环境搭建Ubuntu # 轻量化镜像 # 边缘计算 #OpenHarmony #SSH跳转 #TTS #Python办公自动化 #Python办公 # GPU集群 #samba #量子计算 #mtgsig #美团医药 #美团医药mtgsig #美团医药mtgsig1.2 #TLS协议 #HTTPS #漏洞修复 #运维安全 #汽车 #opc #opc ua #opc模拟服务器 #Socket #套接字 #I/O多路复用 #字节序 #cpu #weston #x11 #x11显示服务器 #RWK35xx #语音流 #实时传输 #超算中心 #PBS #lsf #数据报系统 #报表制作 #职场 #数据可视化 #用数据讲故事 #语音生成 #策略模式 #matlab #AI部署 # ms-swift #PN 结 #服务器线程 # SSL通信 # 动态结构体 #STUN # TURN # NAT穿透 #lvs #MCP服务器注解 #异步支持 #方法筛选 #声明式编程 #自动筛选机制 #adobe #数据迁移 #JNI #pxe #麦克风权限 #访问麦克风并录制音频 #麦克风录制音频后在线播放 #用户拒绝访问麦克风权限怎么办 #uniapp 安卓 苹果ios #将音频保存本地或上传服务器 #free #vmstat #sar #express #cherry studio #sentinel #gmssh #宝塔 #漏洞挖掘 #Exchange #宝塔面板部署RustDesk #RustDesk远程控制手机 #手机远程控制 #系统安装 #MinIO #铁路桥梁 #DIC技术 #箱梁试验 #裂纹监测 #四点弯曲 #可再生能源 #绿色算力 #风电 #Docker #TRO #TRO侵权 #TRO和解 #若依 #Discord机器人 #云部署 #程序那些事 #r语言 #晶振 #AI应用编程 #服务器IO模型 #非阻塞轮询模型 #多任务并发模型 #异步信号模型 #多路复用模型 #领域驱动 #前端开发 #EN4FE #移动端h5网页 #调用浏览器摄像头并拍照 #开启摄像头权限 #拍照后查看与上传服务器端 #摄像头黑屏打不开问题 #自由表达演说平台 #演说 #AI Agent #开发者工具 #工业级串口服务器 #串口转以太网 #串口设备联网通讯模块 #串口服务器选型 #流程图 #图论 #国产开源制品管理工具 #Hadess #一文上手 #蓝桥杯 #okhttp #入侵 #日志排查 #范式 #计算机外设 #Karalon #AI Test #Xshell #Finalshell #生信 #生物信息学 #组学 #remote-ssh #健康医疗 #clawdbot #上下文工程 #langgraph #意图识别 #Reactor #ET模式 #非阻塞 #高考 #WRF #WRFDA #租显卡 #训练推理 #工程实践 #AI应用 #图像识别 #视觉检测 #visual studio #iot #轻量化 #低配服务器 #Anything-LLM #IDC服务器 #私有化部署 #Beidou #北斗 #SSR #gRPC #注册中心 #java大文件上传 #java大文件秒传 #java大文件上传下载 #java文件传输解决方案 #bigtop #hdp #hue #kerberos #gpt #API #taro #pencil #pencil.dev #设计 #wps #Linux多线程 #docker安装seata #simulink #视觉理解 #Moondream2 #多模态AI #信息安全 #信息收集 #c #PyCharm # 远程调试 # YOLOFuse #poll #VoxCPM-1.5-TTS # 云端GPU # PyCharm宕机 #全链路优化 #实战教程 #gateway #Syslog #系统日志 #日志分析 #日志监控 #传统行业 #生产服务器问题查询 #日志过滤 #Autodl私有云 #深度服务器配置 # 水冷服务器 # 风冷服务器 #webgl #区块链 #everything # AI部署 #材料工程 #智能电视 #AI生成 # outputs目录 # 自动化 #AB包 #stl #IIS Crypto #VMware创建虚拟机 #远程更新 #缓存更新 #多指令适配 #物料关联计划 #挖漏洞 #攻击溯源 #warp #ComfyUI # 推理服务器 #DooTask #Keycloak #Quarkus #AI编程需求分析 #防毒面罩 #防尘面罩 #rabbitmq #esp32 arduino #决策树 #HistoryServer #Spark #YARN #jobhistory #m3u8 #HLS #移动端H5网页 #APP安卓苹果ios #监控画面 直播视频流 #Prometheus #sglang #SSH Agent Forwarding # 容器化 #交换机 #三层交换机 #内存接口 # 澜起科技 # 服务器主板 #测速 #iperf #iperf3 #UEFI #BIOS #Legacy BIOS # 显卡驱动备份 #计算机毕业设计 #程序定制 #毕设代做 #课设 #Hadoop #性能 #优化 #RAM #身体实验室 #健康认知重构 #系统思维 #微行动 #NEAT效应 #亚健康自救 #ICT人 #云开发 #wireshark #nacos #银河麒麟aarch64 #KMS 激活 #AI智能棋盘 #Rock Pi S #边缘计算 # 服务器迁移 # 回滚方案 #大模型入门 #开关电源 #热敏电阻 #PTC热敏电阻 #文件传输 #电脑文件传输 #电脑传输文件 #电脑怎么传输文件到另一台电脑 #电脑传输文件到另一台电脑 #云计算运维 #asp.net上传大文件 #TensorRT # 推理优化 #SSH别名 #企业存储 #RustFS #对象存储 #高可用 #BoringSSL # 公钥认证 # 权限修复 #群晖 #音乐 #ICE #IntelliJ IDEA #Spring Boot #Coturn #TURN # 鲲鹏 #http头信息 #log4j #Jetty # 嵌入式服务器 #模块 #建筑缺陷 #红外 #数据集 #数学建模 #数模美赛 # HiChatBox # 离线AI #iphone #SMARC #ARM #TCP服务器 #开发实战 #全文检索 # 代理转发 #银河麒麟服务器系统 #VibeVoice # 云服务器 #短剧 #短剧小程序 #短剧系统 #微剧 #hibernate #nosql #可撤销IBE #服务器辅助 #私钥更新 #安全性证明 #双线性Diffie-Hellman #空间计算 #原型模式 #数据访问 #Comate #duckdb #WEB #I/O模型 #并发 #水平触发、边缘触发 #多路复用 #SSH复用 # 远程开发 #CNAS #CMA #程序文件 #磁盘配额 #存储管理 #形考作业 #国家开放大学 #系统运维 #C++ UA Server #SDK #跨平台开发 #网络安全大赛 #eclipse #servlet #UOS #海光K100 #统信 #云服务器选购 #Saas #线程 #mssql #outlook #错误代码2603 #无网络连接 #2603 #lucene #实时检测 #卷积神经网络 #DAG #机器视觉 #6D位姿 #具身智能 #Fun-ASR # 语音识别 #密码 #firefox #safari #HarmonyOS APP #b树 #AI电商客服 #memory mcp #Cursor #nmodbus4类库使用教程 #docker-compose #spring ai #oauth2 #目标跟踪 #rtmp #声源定位 #MUSIC #windbg分析蓝屏教程 #fs7TF #Buck #NVIDIA #算力 #交错并联 #DGX # 远程访问 #Ubuntu服务器 #硬盘扩容 #命令行操作 #内存治理 #ROS # 局域网访问 # 批量处理 #IFix #c++20 # 远程连接 # 高温监控 # 环境迁移 #npu #matplotlib #安全架构 #gerrit #Ward #思爱普 #SAP S/4HANA #ABAP #NetWeaver #文生视频 #WAN2.2 #AI视频生成 #考研 #国产PLM #瑞华丽PLM #瑞华丽 #PLM #Ubuntu #markdown #建站 #游戏策划 #游戏程序 #用户体验 #电梯 #电梯运力 #电梯门禁 #反向代理 #2026年美赛C题代码 #2026年美赛 #esp32 #mosquito #智能制造 #供应链管理 #工业工程 #库存管理 #智慧城市 #海外短剧 #海外短剧app开发 #海外短剧系统开发 #短剧APP #短剧APP开发 #短剧系统开发 #海外短剧项目 #静脉曲张 #腿部健康 #运动 #WinDbg #Windows调试 #内存转储分析 #resnet50 #分类识别训练 #运维 #AI视频创作系统 #AI视频创作 #AI创作系统 #AI工具 #AI创作工具 #华为od机试 #华为od机考 #华为od最新上机考试题库 #华为OD题库 #华为OD机试双机位C卷 #od机考题库 #Ascend #MindIE #边缘AI # Kontron # SMARC-sAMX8 #FRP #OpenAI #故障 #数据采集 #浏览器指纹 #自动化巡检 #CA证书 #UDP套接字编程 #UDP协议 #网络测试 #二值化 #Canny边缘检测 #轮廓检测 #透视变换 #jquery #分子动力学 #化工仿真 #ESP32编译服务器 #Ping #DNS域名解析 #期刊 #SCI #面向对象 #基础语法 #标识符 #常量与变量 #数据类型 #运算符与表达式 #session #游戏服务器断线 #主板 #总体设计 #电源树 #框图 #starrocks #阿里云RDS #composer #symfony #java-zookeeper #coffeescript #dubbo #勒索病毒 #勒索软件 #加密算法 #.bixi勒索病毒 #数据加密 #JADX-AI 插件