云服务器上跑RoboCup 2D:VNC远程桌面配置与多智能体训练实战

发布时间:2026/10/15 23:52:43
云服务器上跑RoboCup 2D:VNC远程桌面配置与多智能体训练实战 1. 为什么要在云服务器上跑RoboCup 2DRoboCup 2D仿真平台是研究多智能体协作、强化学习和策略优化的经典环境。它本质上是一个基于客户端-服务器架构的实时足球仿真系统服务器负责物理引擎和比赛规则客户端则是各个智能体球队的大脑。很多做多智能体强化学习的朋友第一步就是拿这个平台来练手因为它的状态空间、动作空间和奖励设计都非常清晰而且社区里有大量现成的基准代码可以参考。但问题来了这个平台原生是带图形界面的。服务器启动后会弹出一个可视化窗口实时显示球员跑位、足球轨迹和比分。如果你只有一台本地电脑这当然没问题。可一旦你想把训练任务放到云服务器上长期跑麻烦就出现了——云服务器默认没有显示器也没有图形界面那个可视化窗口根本弹不出来。你只能看到日志文件里一行行的文字没法直观判断智能体到底是在踢球还是在原地转圈。这就是为什么需要VNC远程桌面。VNC的全称是Virtual Network Computing它做的事情很简单把云服务器上的图形界面“搬”到你的本地电脑屏幕上。你在本地看到的是一个窗口但这个窗口里显示的画面实际上是云服务器上真实运行的桌面环境。鼠标和键盘事件也会通过网络传回服务器操作体验和坐在服务器面前几乎一样。把这套环境搭起来之后你能得到什么最直接的好处是你可以在本地用图形界面监控云服务器上的训练过程随时暂停、调整参数、重新启动而不用反复上传下载日志文件。对于做多智能体研究的人来说这意味着调试效率的大幅提升。你不再需要靠猜来判断智能体行为是否合理直接看画面就行。这篇文章适合谁看如果你正在做多智能体强化学习、机器人足球仿真或者任何需要在无头服务器上运行图形化程序的场景这套方案都能直接复用。哪怕你之前没接触过VNC只要跟着步骤走也能在半小时内把环境跑起来。我会把每一步的操作意图、参数选择和踩坑经验都讲清楚让你不仅知道怎么做还知道为什么这么做。2. 环境整体设计与方案选型2.1 为什么选VNC而不是其他远程桌面方案远程桌面方案有好几种比如X11转发、RDP、NoMachine还有各种基于Web的远程桌面。我选VNC原因有三个。第一VNC的架构足够简单。它就是一个服务端和一个客户端服务端在云服务器上跑客户端在本地跑中间通过RFB协议通信。没有复杂的认证流程没有依赖特定操作系统的组件配置起来非常直接。相比之下RDP虽然性能更好但在Linux服务器上的配置要复杂得多而且对多用户会话的支持不如VNC灵活。第二VNC对RoboCup 2D的兼容性最好。这个平台的图形界面是基于Qt或者类似的GUI库渲染的对X11的依赖比较深。VNC本质上就是在X11之上加了一层远程传输所以只要服务器上能正常显示图形界面VNC就能把它传出来。X11转发虽然也能做到类似的事情但它的性能在实时画面上表现很差延迟高、帧率低看智能体跑位会卡成幻灯片。第三VNC的客户端选择多。Windows、macOS、Linux都有成熟的VNC客户端甚至浏览器里也有基于noVNC的网页客户端。这意味着你换电脑、换系统都不需要重新折腾服务端配置。注意VNC传输的是未加密的像素数据默认情况下安全性一般。如果你在公有云上使用建议只开放必要的端口并设置强密码。更稳妥的做法是通过SSH隧道转发VNC端口这样数据会先经过SSH加密再传输。2.2 云服务器配置的基本要求RoboCup 2D本身对硬件要求不高CPU单核性能过得去就行内存2GB足够跑起来。但加上VNC和桌面环境之后资源消耗会上去一些。我建议的最低配置是2核CPU、4GB内存、20GB系统盘。这个配置跑一个RoboCup 2D服务器加一个智能体客户端再加VNC服务端和轻量桌面环境绰绰有余。操作系统选Ubuntu 20.04或者22.04都行这两个版本对VNC和桌面环境的支持最成熟。CentOS系列也可以但软件包管理方式不同新手容易踩坑。我下面以Ubuntu 22.04为例来写其他版本的操作逻辑类似只是包管理命令需要调整。网络方面云服务器的安全组需要放行VNC使用的端口。默认情况下VNC服务端会监听5900以上的端口比如:1对应5901:2对应5902。我建议不要直接用5900而是用5901或者更高的端口号避免和系统上其他服务冲突。如果你打算用SSH隧道那安全组只需要放行SSH端口就行VNC端口不用对外暴露。2.3 桌面环境的选择轻量优先云服务器上装桌面环境第一原则是轻量。GNOME和KDE虽然功能全但资源占用大而且很多组件在无头服务器上根本用不到。我推荐XFCE或者LXDE这两个桌面环境启动快、内存占用小而且对VNC的兼容性很好。XFCE是我用得最多的它的面板、窗口管理器和文件管理器都足够日常使用而且可以通过命令行快速配置。安装命令很简单sudo apt update sudo apt install xfce4 xfce4-goodies -y安装完成后系统里就有了一个完整的桌面环境。但这时候它还不会自动启动需要配合VNC服务端来调用。提示如果你只是临时用一下不想装完整桌面环境也可以只装一个窗口管理器比如openbox或者fluxbox。这样资源占用更少但操作起来会不太方便因为没有面板和任务栏。2.4 VNC服务端选型TigerVNC vs TightVNCLinux上常用的VNC服务端有两个TigerVNC和TightVNC。TigerVNC是TightVNC的一个分支更新更活跃对现代桌面环境的支持更好。我推荐用TigerVNC安装命令sudo apt install tigervnc-standalone-server tigervnc-common -yTigerVNC的一个重要特性是支持“独立会话”也就是说每个VNC连接可以有自己的桌面会话互不干扰。这对于多用户或者需要同时跑多个实验的场景很有用。TightVNC虽然也能用但在Ubuntu 22.04上偶尔会出现剪贴板同步问题TigerVNC则没有这个毛病。安装完成后你需要为当前用户设置一个VNC密码。这个密码是连接时用的和系统登录密码是两回事。设置命令vncpasswd系统会提示你输入并确认密码然后问你是否设置一个“view-only”密码。view-only密码只能看不能操作一般用不到直接选n就行。3. 核心细节解析与实操要点3.1 VNC服务端配置文件的关键参数TigerVNC的服务端启动时会读取用户主目录下的~/.vnc/config文件。这个文件控制了很多重要参数比如桌面环境、分辨率、颜色深度等。默认情况下这个文件可能不存在需要手动创建。我常用的配置是这样的# ~/.vnc/config geometry1920x1080 depth24 dpi96 sessionxfce securitytypesvncauth,tlsvnc localhostno alwaysshared逐条解释一下geometry1920x1080设置桌面分辨率。这个值可以根据你的本地屏幕调整。如果本地是2K屏可以设成2560x1440。分辨率越高传输的数据量越大网络延迟也会更明显。我一般用1920x1080兼顾清晰度和流畅度。depth24颜色深度24位是真彩色。如果网络带宽有限可以降到16位画面会稍微有点色带但传输量会小很多。dpi96屏幕DPI影响字体和图标的大小。96是标准值如果觉得字太小可以调到120。sessionxfce指定启动的桌面环境。这里写xfceVNC服务端启动时会自动调用startxfce4命令。securitytypesvncauth,tlsvnc安全类型。vncauth是传统的VNC密码认证tlsvnc是带TLS加密的认证。如果只在本机或者内网用vncauth就够了。如果要通过公网连接建议加上tlsvnc。localhostno允许非本地连接。如果设成yes只有通过SSH隧道才能连上。这个参数和安全策略有关后面会详细说。alwaysshared允许多个客户端同时连接同一个会话。默认情况下第二个连接会踢掉第一个。加上这个参数后多个客户端可以同时看到同一个桌面。注意alwaysshared虽然方便但也意味着多个客户端可以同时操作鼠标键盘容易互相干扰。如果是团队协作建议约定好谁操作谁观看。3.2 启动脚本的编写与自启动配置配置文件写好后还需要一个启动脚本来拉起VNC服务端。TigerVNC提供了一个vncserver命令可以直接用vncserver :1 -geometry 1920x1080 -depth 24这个命令会在:1端口即5901上启动一个VNC会话。但每次手动敲命令太麻烦而且服务器重启后会话就没了。更好的做法是配置systemd服务让VNC随系统启动。创建一个systemd服务文件sudo nano /etc/systemd/system/vncserver.service内容如下[Unit] DescriptionStart TigerVNC server at startup Aftersyslog.target network.target [Service] Typeforking Useryour_username Groupyour_username WorkingDirectory/home/your_username PIDFile/home/your_username/.vnc/%H:%i.pid ExecStartPre-/usr/bin/vncserver -kill :%i /dev/null 21 ExecStart/usr/bin/vncserver -depth 24 -geometry 1920x1080 :%i ExecStop/usr/bin/vncserver -kill :%i [Install] WantedBymulti-user.target把your_username替换成你的实际用户名。然后启用服务sudo systemctl daemon-reload sudo systemctl enable vncserver1.service sudo systemctl start vncserver1.service这样VNC就会在系统启动时自动运行端口是5901。你可以用systemctl status vncserver1.service查看运行状态。提示如果你需要多个VNC会话可以启用多个实例比如vncserver2.service对应端口5902。每个实例需要独立的配置文件或者不同的启动参数。3.3 防火墙与安全组配置VNC服务端启动后默认监听5900以上的端口。如果你直接通过公网连接需要在云服务器的安全组里放行对应端口。比如:1对应5901:2对应5902。但直接暴露VNC端口到公网是有风险的。VNC的密码认证强度有限而且传输数据未加密。更安全的做法是通过SSH隧道连接。具体操作是在本地电脑上运行SSH命令把本地的某个端口转发到服务器的VNC端口。ssh -L 5901:localhost:5901 your_usernameyour_server_ip这条命令的意思是把本地的5901端口转发到服务器的5901端口。然后你在VNC客户端里连接localhost:5901实际上就连到了服务器的VNC服务端。整个过程中VNC数据都封装在SSH隧道里安全性由SSH保证。用SSH隧道的话云服务器的安全组只需要放行SSH端口默认22VNC端口不用对外暴露。这样即使VNC密码被猜到攻击者也无法直接连接。注意SSH隧道需要保持终端窗口打开。如果关闭终端隧道就断了。可以用-N参数让SSH不执行远程命令只做端口转发然后用-f参数让它后台运行。但更稳妥的做法是用autossh或者配置SSH的ServerAliveInterval参数防止连接被意外断开。4. 实操过程与核心环节实现4.1 从零开始系统更新与依赖安装假设你刚刚创建了一台Ubuntu 22.04的云服务器以root或者有sudo权限的用户登录。第一步是更新系统包列表并升级已有软件sudo apt update sudo apt upgrade -y这一步可能需要几分钟取决于服务器的网络速度和已安装包的数量。升级完成后安装必要的依赖sudo apt install -y wget curl git build-essential这些工具在后续编译RoboCup 2D和相关依赖时会用到。build-essential包含了gcc、g、make等编译工具是必须的。接下来安装桌面环境和VNC服务端sudo apt install -y xfce4 xfce4-goodies tigervnc-standalone-server tigervnc-common安装过程中可能会弹出对话框询问是否将XFCE设为默认显示管理器。如果服务器上没有其他桌面环境选“是”就行。如果已经有GNOME之类的选“否”因为VNC会直接调用XFCE不需要改系统默认。安装完成后验证一下XFCE是否可用startxfce4 --version如果输出了版本信息说明桌面环境安装成功。4.2 配置VNC密码与启动会话为当前用户设置VNC密码vncpasswd输入密码时不会显示字符这是正常的。密码长度建议8位以上包含字母和数字。设置完成后会在~/.vnc/目录下生成一个passwd文件里面存储了加密后的密码。然后创建VNC配置文件mkdir -p ~/.vnc nano ~/.vnc/config写入前面提到的配置内容。保存退出后启动VNC会话vncserver :1如果一切正常你会看到类似这样的输出New server_name:1 (user) desktop is server_name:1 Starting applications specified in /home/user/.vnc/xstartup Log file is /home/user/.vnc/server_name:1.log这说明VNC服务端已经在5901端口上运行了。你可以用ss -tlnp | grep 5901确认端口监听状态。提示如果启动失败查看~/.vnc/server_name:1.log日志文件里面会有详细的错误信息。常见问题包括桌面环境路径不对、权限不足、端口被占用等。4.3 本地VNC客户端连接与画面验证在本地电脑上安装VNC客户端。Windows上可以用TigerVNC Viewer或者RealVNC ViewermacOS上可以用Screen Sharing系统自带或者RealVNC ViewerLinux上直接用vncviewer命令。打开客户端输入服务器地址和端口。如果是直接连接地址是your_server_ip:5901。如果是SSH隧道地址是localhost:5901。然后输入之前设置的VNC密码。连接成功后你会看到一个XFCE桌面。第一次启动可能会比较慢因为系统需要初始化桌面环境的各种组件。耐心等几秒钟桌面就会完全加载出来。这时候你可以打开一个终端试着运行一个图形化程序比如xeyes或者firefox确认图形界面能正常显示。如果能看到窗口说明VNC配置成功。注意如果连接后只看到灰色屏幕或者黑屏通常是xstartup文件配置有问题。TigerVNC默认会生成一个~/.vnc/xstartup文件里面调用了/etc/X11/Xtigervnc-session脚本。如果这个脚本没有正确启动XFCE可以手动修改xstartup直接写入startxfce4 。4.4 RoboCup 2D服务端的编译与运行RoboCup 2D的源代码托管在公开的代码仓库上可以直接克隆下来编译。先安装编译依赖sudo apt install -y cmake libboost-all-dev libqt5opengl5-dev qtbase5-dev然后克隆代码git clone https://github.com/rcsoccersim/rcssserver.git cd rcssserver编译和安装mkdir build cd build cmake .. make -j$(nproc) sudo make install编译完成后运行rcssserver命令应该能看到服务器启动并弹出一个图形化窗口显示绿色的足球场。这个窗口就是通过VNC传输到你本地的。如果窗口没有弹出来检查一下DISPLAY环境变量是否设置正确。在VNC会话中DISPLAY通常是:1。可以用echo $DISPLAY确认。如果没有设置手动导出export DISPLAY:1然后再运行rcssserver。提示RoboCup 2D的服务器默认监听6000端口客户端通过这个端口连接。如果你在云服务器上跑服务器本地跑客户端需要在安全组里放行6000端口。但更常见的做法是服务器和客户端都跑在云服务器上通过VNC观察画面。4.5 智能体客户端的启动与画面观察RoboCup 2D的客户端通常是各个球队自己编写的程序。社区里有不少开源的基准球队比如agent2d、helios等。以agent2d为例克隆代码后编译git clone https://github.com/rcsoccersim/agent2d.git cd agent2d ./bootstrap ./configure make -j$(nproc)编译完成后启动一个球队cd src ./start.sh这个脚本会启动多个球员进程每个球员连接到服务器。如果服务器和客户端都在同一台机器上直接运行就行。如果客户端在另一台机器上需要修改start.sh里的服务器地址。启动后VNC窗口里就能看到球员在场上跑动了。你可以观察他们的站位、传球路线和射门时机判断策略是否合理。如果发现球员原地转圈或者往自家球门踢那就说明策略有问题需要调整代码。注意RoboCup 2D的实时性要求比较高如果服务器CPU负载太重仿真速度会变慢画面也会卡顿。建议在跑训练时关闭不必要的后台进程给仿真留出足够的CPU资源。5. 常见问题与排查技巧实录5.1 VNC连接失败黑屏、灰屏、闪退这是最常见的问题表现是连接成功后看不到桌面只有黑屏或者灰屏。原因通常是xstartup脚本没有正确启动桌面环境。排查步骤查看~/.vnc/目录下的日志文件找到具体的错误信息。检查~/.vnc/xstartup文件的内容。TigerVNC默认生成的xstartup会调用/etc/X11/Xtigervnc-session这个脚本会根据~/.vnc/config里的session参数启动对应的桌面环境。如果sessionxfce没有生效可以手动修改xstartup直接写入#!/bin/sh unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS startxfce4 给xstartup加上可执行权限chmod x ~/.vnc/xstartup重启VNC会话vncserver -kill :1 vncserver :1如果还是黑屏检查一下XFCE是否完整安装。有时候xfce4包安装了但xfce4-session没有装导致桌面环境无法启动。可以用sudo apt install xfce4-session补上。5.2 画面卡顿、延迟高、颜色异常VNC的画面传输对网络带宽比较敏感。如果本地网络不好或者服务器上行带宽有限画面会卡顿。优化方法降低分辨率。把geometry从1920x1080降到1280x720传输量会减少一半以上。降低颜色深度。把depth从24降到16画面会稍微有点色带但流畅度会明显提升。关闭桌面特效。XFCE默认没有太多特效但如果你装了compositor可以关掉。使用SSH隧道时可以启用压缩。SSH的-C参数会压缩传输数据对VNC这种像素数据效果不错。ssh -C -L 5901:localhost:5901 your_usernameyour_server_ip颜色异常通常是因为颜色深度设置不对。如果客户端显示的颜色和服务器上不一致检查两边的depth参数是否匹配。有些VNC客户端会自动协商颜色深度但手动指定更稳妥。5.3 RoboCup 2D窗口无法弹出或显示异常如果VNC桌面正常但RoboCup 2D的窗口弹不出来或者弹出来是乱码通常是Qt库的问题。排查步骤确认DISPLAY环境变量设置正确。在VNC终端里运行echo $DISPLAY应该是:1或者类似的。检查Qt库是否安装完整。RoboCup 2D的图形界面依赖Qt5可以用ldd $(which rcssserver) | grep Qt查看依赖是否满足。如果窗口显示乱码可能是字体问题。安装中文字体sudo apt install fonts-wqy-zenhei fonts-wqy-microhei如果窗口大小不对可以在启动rcssserver时指定窗口尺寸或者修改服务器的配置文件。提示RoboCup 2D的服务器和客户端都支持无头模式运行也就是不显示图形界面。如果你只是跑训练不需要看画面可以用--no-display参数启动服务器这样能节省不少资源。但调试阶段还是建议开着图形界面方便观察。5.4 多用户同时连接时的冲突处理如果团队里多个人需要同时看同一个VNC会话alwaysshared参数是必须的。但多个客户端同时操作鼠标键盘会互相干扰。解决方案约定一个“主操作者”其他人用view-only模式连接。TigerVNC Viewer支持在连接时选择“View only”。或者为每个人分配独立的VNC会话各自看各自的桌面。这样互不干扰但资源消耗会成倍增加。如果只是观看可以考虑用录屏工具把VNC画面录下来分享给其他人。但实时性不如直接连接。注意alwaysshared模式下如果一个人断开了连接其他人不会受影响。但如果服务器端的VNC进程崩溃所有客户端都会断开。建议配置systemd的自动重启功能让VNC进程在崩溃后自动拉起。5.5 服务器重启后VNC无法自动启动如果配置了systemd服务但重启后VNC没有自动启动检查以下几点systemd服务是否已启用systemctl is-enabled vncserver1.service应该输出enabled。服务文件里的User和Group是否正确。必须是实际存在的用户而且该用户有权限访问~/.vnc/目录。PIDFile路径是否正确。TigerVNC生成的PID文件通常在~/.vnc/目录下文件名格式是hostname:display.pid。查看systemd日志journalctl -u vncserver1.service -e里面会有详细的启动失败原因。如果systemd配置太麻烦也可以用crontab的reboot功能crontab -e添加一行reboot /usr/bin/vncserver :1 -geometry 1920x1080 -depth 24这样系统启动时就会自动运行VNC服务端。但crontab方式没有进程监控如果VNC崩溃了不会自动重启。6. 性能调优与长期运行建议6.1 资源占用分析与优化VNC加XFCE加RoboCup 2D整体资源占用大概是这样XFCE桌面环境占200-300MB内存VNC服务端占50-100MBRoboCup 2D服务器占100-200MB每个智能体客户端占50-100MB。如果跑11个球员的完整比赛客户端总内存占用可能到1GB左右。CPU方面RoboCup 2D的仿真循环是单线程的但每个客户端可以独立运行。如果服务器有4核以上可以把客户端分配到不同的核心上减少互相干扰。优化建议关闭XFCE的桌面特效和动画。如果不需要文件管理器可以不启动它。用htop或者glances监控资源占用找出瓶颈。如果内存紧张可以增加swap分区但swap会拖慢仿真速度。6.2 网络带宽与延迟的平衡VNC的画面传输对带宽的要求取决于分辨率和画面变化频率。1920x1080、24位色、30帧的画面理论带宽需求是1920×1080×3×30≈186MB/s但VNC有压缩算法实际带宽需求通常在5-20Mbps之间。如果画面变化不频繁带宽需求会更低。延迟方面VNC的响应延迟主要取决于网络往返时间。同城机房通常在10ms以内跨省可能在30-50ms跨国可能超过100ms。对于RoboCup 2D的调试来说50ms以内的延迟基本感觉不到。如果延迟太高操作会明显滞后。优化方法用SSH隧道时启用压缩ssh -C -L ...降低分辨率和颜色深度。如果只是观看可以用VNC的“低质量”模式牺牲画质换流畅度。考虑用noVNC通过浏览器连接省去安装客户端的麻烦。但noVNC的性能通常不如原生客户端。6.3 数据持久化与备份策略云服务器上的数据尤其是训练日志和模型文件需要定期备份。VNC和桌面环境本身不需要备份重装就行。但RoboCup 2D的代码、配置和训练数据是核心资产。备份策略用rsync定期把重要目录同步到本地或者其他存储。如果云服务商提供了快照功能可以定期打快照。训练日志可以用logrotate管理避免占满磁盘。模型文件建议用版本控制工具管理比如Git LFS。提示RoboCup 2D的训练过程可能持续数天甚至数周期间服务器不能断电断网。建议配置UPS或者选择有稳定电力保障的机房。如果云服务商有自动迁移功能可以在物理机维护时自动迁移到其他节点。6.4 安全加固防止未授权访问VNC服务端如果直接暴露在公网很容易被扫描到并尝试暴力破解。安全加固措施使用强密码至少12位包含大小写字母、数字和特殊字符。配置securitytypestlsvnc启用TLS加密。用SSH隧道连接不直接暴露VNC端口。配置fail2ban监控VNC登录失败次数自动封禁可疑IP。定期更新VNC服务端和系统补丁。如果团队多人使用可以为每个人创建独立的系统用户和VNC会话避免共享密码。TigerVNC支持通过PAM认证可以用系统用户名和密码登录VNC但配置起来稍微复杂一些。注意VNC的密码文件~/.vnc/passwd只有600权限只有所有者能读写。如果权限不对VNC服务端会拒绝启动。可以用chmod 600 ~/.vnc/passwd修复。7. 从调试到部署我的实际使用体会这套环境我用了差不多两年从最初的单机调试到后来的多机分布式训练踩过的坑不少。最开始的时候我试图用X11转发来看RoboCup 2D的画面结果延迟高得没法看球员跑起来像幻灯片。后来换成VNC画面流畅多了但一开始没配好xstartup连上去只有灰屏折腾了半天才发现是session参数没生效。还有一个坑是分辨率。我本地是4K屏一开始把VNC分辨率设成3840x2160结果画面卡得没法操作。后来降到1920x1080流畅度立刻上来了。所以分辨率不是越高越好够用就行。另外如果你打算长期跑训练建议把VNC和RoboCup 2D分开到不同的机器上。VNC机器负责显示RoboCup 2D机器负责计算。这样即使VNC断了训练也不会中断。两者之间通过网络通信RoboCup 2D的协议本身支持远程连接。最后分享一个小技巧如果你只是偶尔看看训练进度不需要实时操作可以用vncserver的-rfbport参数指定一个非标准端口然后在本地用VNC Viewer的“监听模式”连接。这样服务器端不需要一直保持VNC会话需要看的时候再启动能省不少资源。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询