<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh_CN">
  <title>lanying&apos;s blog</title>
  <subtitle>Awoo~</subtitle>
  <link href="https://blog.yufurry.cn/" rel="alternate" type="text/html"/>
  <link href="https://blog.yufurry.cn/atom.xml" rel="self" type="application/atom+xml"/>
  <id>https://blog.yufurry.cn/</id>
  <updated>2026-09-23T00:00:00.000Z</updated>
  <entry>
    <title>前辈！请加入我的QQ群！阿里嘎多！</title>
    <link href="https://qm.qq.com/q/uGEUN5SUzC" rel="alternate" type="text/html"/>
    <id>https://qm.qq.com/q/uGEUN5SUzC</id>
    <published>2026-06-06T00:00:00.000Z</published>
    <updated>2026-06-06T00:00:00.000Z</updated>
    <summary>点击跳转到 QQ 分享链接</summary>
    <content type="html"><![CDATA[]]></content>
    <author><name>蓝影Shadow</name></author>
    <category term="其它"/>
  </entry>
  <entry>
    <title>利用 dnSpy 或 ILSpy 获取某八个按键的音乐游戏国服的三个加密数值</title>
    <link href="https://blog.yufurry.cn/posts/00000024/" rel="alternate" type="text/html"/>
    <id>https://blog.yufurry.cn/posts/00000024/</id>
    <published>2026-09-23T00:00:00.000Z</published>
    <updated>2026-09-23T00:00:00.000Z</updated>
    <summary>本方案需要相比于使用 UnityExplorer 更加简单，只需要一个 Assembly-CSharp.dll 即可，缺点是需要脱壳</summary>
    <content type="html"><![CDATA[<p>:::warning 重要提示
本文章不会附带任何软件程序，仅供参考与学习。请勿用于违法用途！
因特殊性可能会带来侵权/DMCA，如果你认为我侵犯了这些软件的版权，请您联系我删除!
:::</p>
<h2>前言</h2>
<p>上次发了一篇文章是 <a href="/posts/00000017/">利用 UnityExplorer 获取某八个按键的音乐游戏国服的三个加密数值</a>，但是这个方案需要你能够启动游戏，并且已经打好了MelonLoader，而本方案只需要一个 Assembly-CSharp.dll 即可，不需要启动游戏，缺点是需要脱壳。</p>
<h2>正文</h2>
<h3>1.下载并安装 dnSpy 或 ILSpy</h3>
<p><a href="https://github.com/dnSpy/dnSpy/releases">https://github.com/dnSpy/dnSpy/releases</a></p>
<p><a href="https://github.com/icsharpcode/ILSpy/releases">https://github.com/icsharpcode/ILSpy/releases</a></p>
<p>下载上面任意一个即可，或者选一个你喜欢的或者电脑上有的，需要选择适合你系统的版本。</p>
<h3>2.获取脱壳后的 Assembly-CSharp.unpack.dll</h3>
<p>众所周知 SEGA 的大部分游戏都有 HyperTech Crackproof 的壳，这意味着无法直接逆向工程，需要先脱壳。</p>
<p>如果你不希望脱壳，你可以直接使用 UnityExplorer 获取 AesKey，AesIV，ObfuscateParam。指路：<a href="/posts/00000017/">利用 UnityExplorer 获取某八个按键的音乐游戏国服的三个加密数值</a></p>
<p>讲真想要脱这种壳真的不难，如果你有脱壳工具的话可以使用你自己的脱壳工具，或者使用一些在线工具比如 <a href="https://senbei.momokko.moe/">https://senbei.momokko.moe/</a>。</p>
<p>将文件拖入里面之后点击 <strong>Unpack</strong> 按钮即可，得到的文件就是脱壳后的 Assembly-CSharp.unpack.dll。</p>
<h3>3.进行逆向得到 AesKey，AesIV，ObfuscateParam（dnSpy）</h3>
<p>将 Assembly-CSharp.unpack.dll 拖入 dnSpy 中打开，随后在左侧列表依次展开 <strong>Assembly-CSharp</strong> -&gt; <strong>Assembly-CSharp.dll</strong> -&gt; <strong>Net</strong> -&gt; <strong>CipherAES</strong>。</p>
<p>随后点击 <strong>CipherAES</strong> ，随后在右侧的窗口中找到 <strong>private static readonly string AesKey</strong> 和 <strong>private static readonly string AesIV</strong> ，这两个就是我们需要的AesKey和AesIV</p>
<p>大概是长这样</p>
<pre><code>using System;
using System.Security.Cryptography;
using System.Text;
using MAI2.Util;

namespace Net
{
	// Token: 0x02000233 RID: 563
	internal class CipherAES : Singleton&lt;CipherAES&gt;
	{
		// Token: 0x06001681 RID: 5761 RVA: 0x0009474C File Offset: 0x0009474C
		public static byte[] Encrypt(byte[] data)
		{
			byte[] result;
			using (AesManaged aesManaged = new AesManaged())
			{
				// ...
			}
			return result;
		}

		// Token: 0x06001682 RID: 5762 RVA: 0x000947DC File Offset: 0x000947DC
		public static byte[] Decrypt(byte[] encryptData)
		{
			byte[] result;
			using (AesManaged aesManaged = new AesManaged())
			{
				// ...
			}
			return result;
		}

		// Token: 0x04000FA1 RID: 4001
		private static readonly int BLOCK_SIZE = 128;

		// Token: 0x04000FA2 RID: 4002
		private static readonly int KEY_SIZE = 256;

		// Token: 0x04000FA3 RID: 4003
		private static readonly string AesKey = "************************";

		// Token: 0x04000FA4 RID: 4004
		private static readonly string AesIV = "************************";
	}
}
</code></pre>
<p>这样就得到了 AesKey 和 AesIV。</p>
<p>如果不希望自己翻的话还是在左侧的列表中可以直接找到 AesIV:string @04000FA4 和 AesKey:string @04000FA3</p>
<p>AES Key:</p>
<pre><code>// Net.CipherAES
// Token: 0x04000FA3 RID: 4003
private static readonly string AesKey = "************************";

</code></pre>
<p>AES IV:</p>
<pre><code>// Net.CipherAES
// Token: 0x04000FA4 RID: 4004
private static readonly string AesIV = "************************";
</code></pre>
<p>ObfuscateParam:</p>
<pre><code>// Net.Packet.Packet
// Token: 0x040013D7 RID: 5079
protected static string ObfuscateParam = "********";
</code></pre>
<p><strong>注意 ObfuscateParam 不在 Net -&gt; CipherAES 中，需要切换到 Net -&gt; Net.Packet -&gt; Packet -&gt; ObfuscateParam 中</strong></p>
<p><img src="/posts_img/2026/09/00000024/p-00000024-2.webp" alt="" /></p>
<h3>4.进行逆向得到 AesKey，AesIV，ObfuscateParam（ILSpy）</h3>
<p>和上面的操作差不多，用 ILSpy 打开 <strong>Assembly-CSharp.unpack.dll</strong> ，随后在左侧列表依次展开 <strong>Assembly-CSharp.unpack (0.0.0.0,.NETFramework,v4.0)</strong> -&gt; <strong>Net</strong> -&gt; <strong>CipherAES</strong>，点击 <strong>CipherAES</strong> ，随后在右侧的窗口中找到 <strong>private static readonly string AesKey</strong> 和 <strong>private static readonly string AesIV</strong> ，这两个就是我们需要的AesKey和AesIV。</p>
<p>AES Key / IV:</p>
<pre><code>
// Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
// Net.CipherAES
using System.Security.Cryptography;
using System.Text;
using MAI2.Util;
using Net;

internal class CipherAES : Singleton&lt;CipherAES&gt;
{
	private static readonly int BLOCK_SIZE = 128;

	private static readonly int KEY_SIZE = 256;

	private static readonly string AesKey = "************************";

	private static readonly string AesIV = "************************";

	public static byte[] Encrypt(byte[] data)
	{
		// ...
	}

	public static byte[] Decrypt(byte[] encryptData)
	{
		// ...
	}
}

</code></pre>
<p>ObfuscateParam:</p>
<pre><code>// Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
// Net.Packet.Packet
protected static string ObfuscateParam = "********";

</code></pre>
<p><strong>注意 ObfuscateParam 不在 Net -&gt; CipherAES 中，需要切换到 Net -&gt; Net.Packet -&gt; Packet -&gt; ObfuscateParam 中</strong></p>
<p><img src="/posts_img/2026/09/00000024/p-00000024-3.webp" alt="" /></p>
<h3>常见问题</h3>
<ol>
<li>
<p>Q：我在 dnSpy / ILSpy 中没有找到 AesKey AesIV 和 ObfuscateParam，这是为什么？</p>
<p>A: 你可能没有找到正确的类，或者没有找到正确的字段。请检查一下你的类是否正确，或者检查一下你的字段是否正确。</p>
</li>
<li>
<p>Q：为啥我看到的内容和你的不一样？</p>
<p>A: 你可能选错了语言类型，在 dnSpy / ILSpy 中需要选择C#，不过其实都差不多只要你能找到 AesKey AesIV 和 ObfuscateParam 就可以了。</p>
</li>
</ol>
]]></content>
    <author><name>蓝影Shadow</name></author>
    <category term="技术"/>
  </entry>
  <entry>
    <title>某个八个按键的街机音乐游戏增量包文件下载配信流程</title>
    <link href="https://blog.yufurry.cn/posts/00000023/" rel="alternate" type="text/html"/>
    <id>https://blog.yufurry.cn/posts/00000023/</id>
    <published>2026-09-06T00:00:00.000Z</published>
    <updated>2026-09-06T00:00:00.000Z</updated>
    <summary>本文从协议逆向角度详细分析了加密通信、资源索引解析的技术实现，并提供了一个开箱可用的Python示例。</summary>
    <content type="html"><![CDATA[<p>:::warning 重要提示
本文章不会附带任何软件程序，仅供参考与学习。请勿用于违法用途！
因特殊性可能会带来侵权/DMCA，如果你认为我侵犯了这些软件的版权，请您联系我删除!
:::</p>
<p>本文提到的所有数值,key,客户端ID,URL等均为示例值，请以实际为准。部分数值已做脱敏处理，仅用于说明。</p>
<h2>链路结构</h2>
<p>增量包配信链路由三段组成，各段承载不同协议角色：</p>
<pre><code>┌──────────────────────────────────────────────┐
│ 第一段  instruction 请求                       │
│   POST http://at.sys-allnet.cn/net/delivery/  │
│        instruction                            │
│   请求体：AES-128-CBC 密文                     │
│   响应体：IV(明文) + AES-128-CBC 密文          │
│   解密结果：经过混淆处理的 order 索引地址       │
├──────────────────────────────────────────────┤
│ 第二段  order 索引文件                         │
│   明文 GET，User-Agent 取值为 client_id        │
│   内容：INSTALLn= 数据文件地址（.app/.opt）     │
├──────────────────────────────────────────────┤
│ 第三段  增量包本体                             │
│   明文 GET（服务器支持 Range 请求），UA 同上    │
│   载荷无应用层加密、无完整性校验                │
└──────────────────────────────────────────────┘
</code></pre>
<p>链路中使用的协议标识如下：</p>
<table>
<thead>
<tr>
<th>标识</th>
<th>出现位置</th>
<th>含义</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>SDGB</code></td>
<td>title_id、User-Agent</td>
<td>机台在 ALL.NET 体系内的 title 代号</td>
</tr>
<tr>
<td><code>A63E*******</code></td>
<td>client_id、下载通道 UA</td>
<td>机台标识符 User-Agent</td>
</tr>
<tr>
<td><code>DFI</code></td>
<td>Pragma 头</td>
<td>配信指令业务标记（全称未确认）</td>
</tr>
<tr>
<td>order</td>
<td>第二段</td>
<td>资源索引文件，纯文本格式</td>
</tr>
<tr>
<td><code>INSTALLn</code></td>
<td>order 内容</td>
<td>单条资源地址记录</td>
</tr>
</tbody>
</table>
<p>传输层为纯 HTTP，无 TLS。密码学保护仅存在于第一段控制信道，第二、三段为明文传输。</p>
<h2>instruction 请求构造</h2>
<h3>明文载荷</h3>
<p>请求明文为表单编码字符串，共三个字段：</p>
<pre><code>title_id=SDGB&amp;title_ver=1.50.00&amp;client_id=A63E*******
</code></pre>
<ul>
<li><code>title_id</code>：固定值 <code>SDGB</code>；</li>
<li><code>title_ver</code>：版本字符串，服务端根据该值返回对应版本的资源索引地址，协议层面为不透明字符串，格式约束由服务端实现决定；</li>
<li><code>client_id</code>：11 字符机台标识，除参与表单外，还以同一取值充当后续数据通道的 User-Agent。</li>
</ul>
<p>请求中不包含签名、HMAC、时间戳或防重放字段，服务端可验证的身份信息仅为 client_id 明文。</p>
<h3>加密参数</h3>
<p>加密算法为 AES-128-CBC（密钥 16 字节），填充方式为 PKCS#7。密钥为硬编码常量：</p>
<pre><code>2f 3f 6a 6f 2b 22 4c 26 5c 43 72 39 28 3d 6b 47
</code></pre>
<p>CBC 初始向量为 16 字节全零。加密前，明文头部需附加 16 字节全零作为保留槽位：</p>
<pre><code>KEY = bytes([47, 63, 106, 111, 43, 34, 76, 38, 92, 67, 114, 57, 40, 61, 107, 71])
content = b'title_id=SDGB&amp;title_ver=1.50.00&amp;client_id=A63E*******'
payload = bytes(16) + content            # 头部附加 16 字节零
cipher = AES.new(KEY, AES.MODE_CBC, bytes(16))
body = cipher.encrypt(pad(payload, 16))  # PKCS#7 填充
</code></pre>
<p>该槽位与协议双向使用的 <code>IV || 数据</code> 帧抽象相关，请求侧与响应侧的处理方式不同，见响应解密部分。</p>
<h3>报文格式</h3>
<p>请求方法为 POST，端点为 <code>http://at.sys-allnet.cn/net/delivery/instruction</code>。请求体为加密后的原始字节序列，不做表单编码，未设置 Content-Type。请求头仅需两个字段：</p>
<pre><code>User-Agent: SDGB;Windows/Lite
Pragma: DFI
</code></pre>
<h3>CBC 首块恒定性</h3>
<p>由于初始向量恒为零、明文首 16 字节槽位亦恒为零，第一个密文块为仅依赖密钥的常量：</p>
<pre><code>C0 = Enc(K, 0^16 ⊕ 0^16) = Enc(K, 0^16)
</code></pre>
<p>该常量可预计算，且对所有请求报文相同。该特性不泄露明文内容，但构成固定流量特征，可用于传输层流量识别。</p>
<h2>响应解密与解析</h2>
<h3>帧格式</h3>
<p>响应状态码为 200 时，响应体为二进制数据，总长度不小于 16 字节，结构分为两部分：</p>
<ul>
<li>前 16 字节：初始向量，明文传输；</li>
<li>其余部分：AES-128-CBC 密文。</li>
</ul>
<p>解密使用与请求相同的静态密钥，初始向量取自响应体前 16 字节：</p>
<pre><code>iv = resp.content[:16]
plain = unpad(AES.new(KEY, AES.MODE_CBC, iv).decrypt(resp.content[16:]), 16)
text = unquote(plain.decode('utf-8'), 'utf-8')
</code></pre>
<p>响应体长度小于 16 字节或 PKCS#7 填充校验失败时，视为无效响应。非 200 状态码表示请求被拒绝。</p>
<p>两个方向的帧处理方式差异如下：</p>
<table>
<thead>
<tr>
<th>方向</th>
<th>16 字节槽位处理</th>
<th>IV 来源</th>
</tr>
</thead>
<tbody>
<tr>
<td>请求</td>
<td>纳入明文一并加密（取值为全零）</td>
<td>配置值：全零</td>
</tr>
<tr>
<td>响应</td>
<td>以明文形式置于帧头</td>
<td>服务端生成，随响应传输</td>
</tr>
</tbody>
</table>
<p>即请求侧与响应侧遵循相同的 <code>IV || 数据</code> 帧抽象，但实现不对称。</p>
<h3>明文格式</h3>
<p>解密结果为经过百分号编码的查询字符串。处理顺序为：先整体 unquote，再按表单键值对解析。<code>parse_qs</code> 内部会再次执行百分号解码，编码实际被解码两次；因内容中不含残余百分号序列，第二次解码无副作用。</p>
<pre><code>uri=tps%3A%2F%2Fnaomi_xxx%2F...%7Ctps%3A%2F%2F...
</code></pre>
<p>协议中实际使用的字段仅有 <code>uri</code>。解码后结构如下（地址内容为示意，字段结构为实际观测值）：</p>
<pre><code>uri=tps://naomi_xxx/xxx/option_1_50/SDGB_option_1_50_0_info|tps://...
</code></pre>
<p><code>uri</code> 字段内以 <code>|</code> 分隔多条候选地址，指向同一份 order 索引的不同节点，任取一条可用地址即可。候选列表中可能存在字面量 <code>null</code> 条目，解析时需过滤。</p>
<h2>URL 混淆还原</h2>
<h3>混淆方式</h3>
<p><code>uri</code> 字段中的地址经过四层变换：</p>
<table>
<thead>
<tr>
<th>层</th>
<th>变换</th>
<th>示例</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>scheme 前缀残缺</td>
<td><code>tps://</code> / <code>ps://</code> / <code>ttp://</code>，缺失 "ht" 字符</td>
</tr>
<tr>
<td>2</td>
<td>主机名点号替换为下划线</td>
<td><code>naomi_sys_1</code></td>
</tr>
<tr>
<td>3</td>
<td>路径中版本号点号替换为下划线</td>
<td><code>option_1_50</code> 实为 <code>option_1.50</code></td>
</tr>
<tr>
<td>4</td>
<td>扩展名点号替换为下划线</td>
<td>结尾 <code>_info</code> 实为 <code>.info</code></td>
</tr>
</tbody>
</table>
<p>第一层变换使匹配 <code>https?://</code> 模式的常规地址提取正则失效，混淆目标是阻止未实现协议解析的脚本直接获取索引地址。</p>
<p>由路径结构可确认资源分为 <code>option</code> 与 <code>patch</code> 两类，版本号以两段数字形式出现在路径中。</p>
<h3>还原规则</h3>
<p>按层逆变换：</p>
<pre><code>url = re.sub(r'^tps://', 'https://', url)
url = re.sub(r'^ps://',  'https://', url)
url = re.sub(r'^ttp://', 'http://',  url)

host = hostname.replace('_', '.')

path = re.sub(r'(patch|option)_(\d+)_(\d+)', r'\1_\2.\3', path)  # option_1_50 → option_1.50
path = re.sub(r'_([a-zA-Z0-9]+)$', r'.\1', path)                 # 结尾 _info → .info
</code></pre>
<p>主机名含端口时需在重建 netloc 时保留端口号。还原后地址形如：</p>
<pre><code>https://naomi.xxx/xxx/option_1.50/SDGB_option_1.50_0.info
</code></pre>
<p>该混淆仅作用于 instruction 响应中给出的索引地址；order 文件内部的资源地址为完整有效 URL，不经混淆处理。</p>
<h2>order 索引文件</h2>
<h3>拉取</h3>
<p>使用 GET 请求获取还原后的索引地址，User-Agent 设置为 <code>client_id</code> 取值（<code>A63E*******</code>）。数据通道不使用 Cookie、Token 等凭据，访问控制仅依赖 User-Agent 匹配。</p>
<h3>记录格式</h3>
<p>order 文件为纯文本，每行一条记录：</p>
<pre><code>INSTALL1=https://xxx/.../SDGB_option_xxx.app
INSTALL2=https://xxx/.../SDGB_option_yyy.opt
</code></pre>
<p>提取正则：</p>
<pre><code>pattern = r'INSTALL\d+=\s*(https?://\S+)'
</code></pre>
<p>提取结果按文件名（URL 最后一段路径）做自然排序，即数值感知排序，使 <code>1、2、…、10、11</code> 的顺序不受字典序影响。<code>INSTALL</code> 记录的序号对应官方定义的资源安装顺序，排序操作即按序号还原原始次序。</p>
<h2>增量包传输</h2>
<p>获取资源地址后的传输流程：</p>
<ol>
<li>HEAD 请求读取 <code>Content-Length</code> 响应头，获取文件总大小；</li>
<li>服务器支持 HTTP Range 请求，可通过 <code>Range: bytes=start-end</code> 头部实现分段传输；</li>
<li>User-Agent 保持为 <code>client_id</code> 取值；</li>
<li>载荷即最终文件数据，无应用层加密，无校验字段，落盘数据即为最终内容。</li>
</ol>
<p>整条链路中唯一的密码学操作发生在 instruction 请求与响应的单次往返内；数据通道的完整性与机密性均依赖传输层机制，而传输层为明文 HTTP。</p>
<h2>Python示例</h2>
<pre><code>import os
import re
import sys
import time
import requests
import threading
import webbrowser
from urllib.parse import parse_qs, unquote, urlparse, urlunparse
from concurrent.futures import ThreadPoolExecutor, as_completed
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from flask import Flask, render_template_string, request, jsonify, send_from_directory

app = Flask(__name__)

# h2和id换成自己的，一般填同一个
S = {
    "v": "1.56",
    "k": bytes([47, 63, 106, 111, 43, 34, 76, 38, 92, 67, 114, 57, 40, 61, 107, 71]),
    "iv": bytes(16),
    "url": "http://at.sys-allnet.cn/net/delivery/instruction",
    "h1": "SDGB;Windows/Lite",
    "h2": "A63E*******",
    "id": "A63E*******",
}

W = os.path.dirname(os.path.abspath(__file__))

state = {
    "files": [],
    "urls": [],
    "downloading": False,
    "progress": {},
    "selected": [],
    "current": "",
    "title_ver": "1.56"
}

def aes_crypt(key, iv, data, enc=True):
    c = AES.new(key, AES.MODE_CBC, iv)
    if enc:
        return c.encrypt(pad(data, 16))
    return unpad(c.decrypt(data), 16)

def fix_url(u):
    u = re.sub(r'^tps://|^ps://', 'https://', re.sub(r'^ttp://', 'http://', u))
    p = urlparse(u)
    if p.hostname:
        h = p.hostname.replace('_', '.')
        pa = re.sub(r'(patch|option)_(\d+)_(\d+)', r'\1_\2.\3', p.path)
        pa = re.sub(r'_([a-zA-Z0-9]+)$', r'.\1', pa)
        return urlunparse((p.scheme, h + (f":{p.port}" if p.port else ""), pa, p.params, p.query, p.fragment))
    return u

def get_main():
    content = f'title_id=SDGB&amp;title_ver={state["title_ver"]}&amp;client_id={S["id"]}'.encode()
    payload = bytes(16) + content
    encrypted = aes_crypt(S["k"], S["iv"], payload, True)
    r = requests.post(S["url"], data=encrypted, headers={"User-Agent": S["h1"], "Pragma": "DFI"}, timeout=30)
    r.raise_for_status()
    if len(r.content) &lt; 16:
        raise RuntimeError("Response too short")
    decrypted = aes_crypt(S["k"], r.content[:16], r.content[16:], False)
    raw = unquote(decrypted.decode('utf-8'))
    q = parse_qs(raw)
    items = [x.strip() for x in q.get('uri', [''])[0].split('|') if x.strip() and x.strip().lower() != 'null']
    items = [fix_url(x) for x in items]
    if not items:
        raise RuntimeError("No URLs")
    return items[0]

def sess():
    s = requests.Session()
    s.headers.update({"User-Agent": S["h2"]})
    return s

def fetch(url, name):
    tmp = os.path.join(W, name + ".tmp")
    s = sess()
    try:
        r = s.head(url, timeout=30)
        r.raise_for_status()
        total = int(r.headers.get('Content-Length', 0))
    except:
        total = 0
    if not total:
        r = s.get(url, stream=True, timeout=(10, 120))
        r.raise_for_status()
        with open(tmp, 'wb') as f:
            for chunk in r.iter_content(262144):
                if chunk:
                    f.write(chunk)
        os.replace(tmp, os.path.join(W, name))
        return True
    with open(tmp, 'wb') as f:
        f.truncate(total)
    cs = 2 * 1024 * 1024
    cnt = min(4, (total + cs - 1) // cs)
    csz = (total + cnt - 1) // cnt
    chunks = [(i * csz, min((i + 1) * csz - 1, total - 1)) for i in range((total + csz - 1) // csz)]

    def worker(st, ed):
        for _ in range(3):
            try:
                r2 = s.get(url, headers={"Range": f"bytes={st}-{ed}"}, stream=True, timeout=(10, 120))
                r2.raise_for_status()
                with open(tmp, 'r+b') as f:
                    f.seek(st)
                    for chunk in r2.iter_content(262144):
                        if chunk:
                            f.write(chunk)
                return True
            except:
                time.sleep(1)
        return False

    with ThreadPoolExecutor(max_workers=len(chunks)) as ex:
        fs = [ex.submit(worker, st, ed) for st, ed in chunks]
        for f, (st, ed) in zip(as_completed(fs), chunks):
            if not f.result():
                r2 = s.get(url, headers={"Range": f"bytes={st}-{ed}"}, stream=True, timeout=(10, 120))
                r2.raise_for_status()
                with open(tmp, 'r+b') as f2:
                    f2.seek(st)
                    for chunk in r2.iter_content(262144):
                        if chunk:
                            f2.write(chunk)
    os.replace(tmp, os.path.join(W, name))
    return True

def parse_list(src, local=False):
    if local:
        with open(src, 'r', encoding='utf-8') as f:
            text = f.read()
    else:
        text = sess().get(src, timeout=30).text
    pairs = []
    for m in re.findall(r'INSTALL\d+=\s*(https?://\S+)', text):
        n = m.split('/')[-1]
        pairs.append((n, m))
    pairs.sort(key=lambda x: [int(p) if p.isdigit() else p.lower() for p in re.split(r'(\d+)', x[0])])
    return [x[0] for x in pairs], [x[1] for x in pairs]

HTML_TEMPLATE = """
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;SDGB Download Tool&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;header&gt;
        &lt;h1&gt;SDGB Download Tool&lt;/h1&gt;
    &lt;/header&gt;

    &lt;main&gt;
        &lt;section id="config"&gt;
            &lt;h2&gt;Configuration&lt;/h2&gt;
            &lt;div&gt;
                &lt;label for="titleVer"&gt;Title Version:&lt;/label&gt;
                &lt;input type="text" id="titleVer" value="1.56"&gt;
                &lt;button id="updateVerBtn"&gt;Update Version&lt;/button&gt;
            &lt;/div&gt;
            &lt;p id="versionStatus"&gt;&lt;/p&gt;
        &lt;/section&gt;

        &lt;section id="status"&gt;
            &lt;h2&gt;Status&lt;/h2&gt;
            &lt;p id="statusMessage"&gt;Ready&lt;/p&gt;
            &lt;button id="initBtn"&gt;Initialize&lt;/button&gt;
            &lt;button id="refreshBtn"&gt;Refresh List&lt;/button&gt;
        &lt;/section&gt;

        &lt;section id="fileList"&gt;
            &lt;h2&gt;Available Files&lt;/h2&gt;
            &lt;div id="fileContainer"&gt;&lt;/div&gt;
        &lt;/section&gt;

        &lt;section id="controls"&gt;
            &lt;h2&gt;Download Controls&lt;/h2&gt;
            &lt;button id="downloadSelectedBtn"&gt;Download Selected&lt;/button&gt;
            &lt;button id="downloadAllBtn"&gt;Download All&lt;/button&gt;
        &lt;/section&gt;

        &lt;section id="downloadProgress"&gt;
            &lt;h2&gt;Download Progress&lt;/h2&gt;
            &lt;div id="progressContainer"&gt;&lt;/div&gt;
        &lt;/section&gt;
    &lt;/main&gt;

    &lt;script&gt;
        let files = [];
        let urls = [];

        function updateStatus(msg) {
            document.getElementById('statusMessage').textContent = msg;
        }

        function loadFileList() {
            fetch('/api/files')
                .then(r =&gt; r.json())
                .then(data =&gt; {
                    files = data.files;
                    urls = data.urls;
                    renderFileList();
                })
                .catch(err =&gt; updateStatus('Error loading files: ' + err));
        }

        function renderFileList() {
            const container = document.getElementById('fileContainer');
            container.innerHTML = '';
            const table = document.createElement('table');
            const thead = document.createElement('thead');
            thead.innerHTML = '&lt;tr&gt;&lt;th&gt;Select&lt;/th&gt;&lt;th&gt;#&lt;/th&gt;&lt;th&gt;Filename&lt;/th&gt;&lt;/tr&gt;';
            table.appendChild(thead);
            const tbody = document.createElement('tbody');
            files.forEach((name, idx) =&gt; {
                const tr = document.createElement('tr');
                const cb = document.createElement('input');
                cb.type = 'checkbox';
                cb.value = idx;
                tr.appendChild(document.createElement('td')).appendChild(cb);
                tr.appendChild(document.createElement('td')).textContent = idx + 1;
                tr.appendChild(document.createElement('td')).textContent = name;
                tbody.appendChild(tr);
            });
            table.appendChild(tbody);
            container.appendChild(table);
        }

        function getSelected() {
            const cbs = document.querySelectorAll('#fileContainer input[type=checkbox]:checked');
            return Array.from(cbs).map(cb =&gt; parseInt(cb.value));
        }

        document.getElementById('updateVerBtn').addEventListener('click', function() {
            const ver = document.getElementById('titleVer').value.trim();
            if (!ver) {
                document.getElementById('versionStatus').textContent = 'Please enter a version';
                return;
            }
            fetch('/api/version', {
                method: 'POST',
                headers: {'Content-Type': 'application/json'},
                body: JSON.stringify({version: ver})
            })
            .then(r =&gt; r.json())
            .then(data =&gt; {
                document.getElementById('versionStatus').textContent = data.message;
                updateStatus('Version updated to ' + ver);
            })
            .catch(err =&gt; {
                document.getElementById('versionStatus').textContent = 'Error: ' + err;
            });
        });

        document.getElementById('initBtn').addEventListener('click', function() {
            updateStatus('Initializing...');
            fetch('/api/init')
                .then(r =&gt; r.json())
                .then(data =&gt; {
                    updateStatus(data.message);
                    loadFileList();
                })
                .catch(err =&gt; updateStatus('Init error: ' + err));
        });

        document.getElementById('refreshBtn').addEventListener('click', function() {
            loadFileList();
            updateStatus('List refreshed');
        });

        document.getElementById('downloadSelectedBtn').addEventListener('click', function() {
            const selected = getSelected();
            if (selected.length === 0) {
                updateStatus('No files selected');
                return;
            }
            startDownload(selected);
        });

        document.getElementById('downloadAllBtn').addEventListener('click', function() {
            if (files.length === 0) {
                updateStatus('No files available');
                return;
            }
            startDownload(files.map((_, i) =&gt; i));
        });

        function startDownload(idxs) {
            updateStatus('Downloading...');
            fetch('/api/download', {
                method: 'POST',
                headers: {'Content-Type': 'application/json'},
                body: JSON.stringify({indices: idxs})
            })
            .then(r =&gt; r.json())
            .then(data =&gt; {
                updateStatus(data.message);
                checkProgress();
            })
            .catch(err =&gt; updateStatus('Download error: ' + err));
        }

        function checkProgress() {
            fetch('/api/progress')
                .then(r =&gt; r.json())
                .then(data =&gt; {
                    const container = document.getElementById('progressContainer');
                    container.innerHTML = '';
                    if (data.running) {
                        const p = document.createElement('p');
                        p.textContent = 'Downloading: ' + data.current;
                        container.appendChild(p);
                        setTimeout(checkProgress, 1000);
                    } else {
                        const p = document.createElement('p');
                        p.textContent = 'Download complete';
                        container.appendChild(p);
                        updateStatus('Ready');
                        loadFileList();
                    }
                })
                .catch(() =&gt; setTimeout(checkProgress, 2000));
        }

        loadFileList();
        updateStatus('Ready');
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
"""

@app.route('/')
def index():
    return render_template_string(HTML_TEMPLATE)

@app.route('/api/files')
def api_files():
    return jsonify({"files": state["files"], "urls": state["urls"]})

@app.route('/api/version', methods=['POST'])
def api_version():
    data = request.get_json()
    version = data.get('version', '').strip()
    if not version:
        return jsonify({"message": "Invalid version"}), 400
    state["title_ver"] = version
    return jsonify({"message": f"Version set to {version}"})

@app.route('/api/init')
def api_init():
    try:
        main_url = get_main()
        name = main_url.split('/')[-1].split('?')[0]
        fetch(main_url, name)
        files, urls = parse_list(os.path.join(W, name), True)
        state["files"] = files
        state["urls"] = urls
        return jsonify({"message": f"Initialized, found {len(files)} files"})
    except Exception as e:
        return jsonify({"message": f"Error: {str(e)}"}), 500

@app.route('/api/download', methods=['POST'])
def api_download():
    if state["downloading"]:
        return jsonify({"message": "Download already in progress"}), 400
    
    data = request.get_json()
    indices = data.get('indices', [])
    if not indices:
        return jsonify({"message": "No indices provided"}), 400
    
    def download_worker():
        state["downloading"] = True
        try:
            for idx in indices:
                if idx &lt; len(state["urls"]) and idx &lt; len(state["files"]):
                    state["current"] = state["files"][idx]
                    fetch(state["urls"][idx], state["files"][idx])
            state["current"] = None
        finally:
            state["downloading"] = False
    
    thread = threading.Thread(target=download_worker)
    thread.daemon = True
    thread.start()
    
    return jsonify({"message": f"Downloading {len(indices)} files"})

@app.route('/api/progress')
def api_progress():
    return jsonify({
        "running": state["downloading"],
        "current": state.get("current", "")
    })

def run():
    port = 2580
    url = f"http://127.0.0.1:{port}"
    webbrowser.open(url)
    app.run(host='127.0.0.1', port=port, debug=False)

if __name__ == "__main__":
    try:
        run()
    except KeyboardInterrupt:
        print("\nStopped")
    except Exception as e:
        print(f"Error: {e}")
</code></pre>
<p>复制后粘贴为<strong>app.py</strong>，将h2和id换成自己的，一般填同一个，随后执行</p>
<pre><code>pip install requests pycryptodome flask
</code></pre>
<p>安装依赖。安装完成后执行</p>
<pre><code>python app.py
</code></pre>
<p>即可启动，默认web UI地址<code>http://127.0.0.1:2580</code>，可自定义标题版本，默认1.56。可以直接通过web UI操作下载配信文件或增量包。</p>
<p><img src="/posts_img/2026/09/00000023/p-00000023-2.webp" alt="" /></p>
]]></content>
    <author><name>蓝影Shadow</name></author>
    <category term="技术"/>
  </entry>
  <entry>
    <title>DeepSeek-V4-Pro 正式版上线：性能直追 Fable 5，价格仅为其六十分之一</title>
    <link href="https://blog.yufurry.cn/posts/00000022/" rel="alternate" type="text/html"/>
    <id>https://blog.yufurry.cn/posts/00000022/</id>
    <published>2026-08-13T00:00:00.000Z</published>
    <updated>2026-08-13T00:00:00.000Z</updated>
    <summary>8月13日凌晨，DeepSeek 将 V4 Pro 从预览版转为正式版，Terminal Bench 2.1 跑分追至距 Fable 5 仅 0.1 分，价格仅为后者的约 1/57</summary>
    <content type="html"><![CDATA[<h2>概述</h2>
<p>2026 年 8 月 12 日深夜，DeepSeek 完成了 V4 Pro 模型从预览版到正式版的静默升级。此次更新未伴随正式发布会或版本说明，仅在 API 文档定价页面中，模型版本标识由 Preview 更新为 <strong>DeepSeek-V4-Pro-0813</strong>。模型调用名称 <code>deepseek-v4-pro</code> 保持不变，现有用户无需修改代码即可使用新版模型。</p>
<p>同日凌晨，马斯克旗下 xAI 的 Grok 4.6 也正式发布，其在 GDPVal-AA v2 榜单上的 Elo 评分达到 1753，超过 Fable 5。两款高性价比旗舰模型同期发布，引发了行业广泛关注。</p>
<p>本文将从以下维度分析 V4 Pro 正式版的升级情况：性能提升幅度、基准测试表现、性价比评估，以及 Flash 与 Pro 的选型建议。需说明的是，截至本文撰写时（2026 年 8 月 13 日），官方尚未发布完整的 V4-Pro-0813 更新日志，文中跑分数据主要来自社区渠道及官方群流出信息，具体数据以官方后续发布为准。</p>
<h2>V4 系列参数回顾</h2>
<p>为便于理解本次升级的定位，先列出 V4 系列各版本的核心参数：</p>
<table>
<thead>
<tr>
<th>对比项</th>
<th>V4-Pro 预览版</th>
<th>V4-Pro 正式版 (0813)</th>
<th>V4-Flash 正式版 (0731)</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>总参数</strong></td>
<td>1.6T</td>
<td>1.6T（未调整）</td>
<td>284B</td>
</tr>
<tr>
<td><strong>激活参数</strong></td>
<td>49B</td>
<td>49B（未调整）</td>
<td>13B</td>
</tr>
<tr>
<td><strong>架构</strong></td>
<td>MoE</td>
<td>MoE</td>
<td>MoE</td>
</tr>
<tr>
<td><strong>上下文</strong></td>
<td>1M tokens</td>
<td>1M tokens</td>
<td>1M tokens</td>
</tr>
<tr>
<td><strong>最大输出</strong></td>
<td>384K tokens</td>
<td>384K tokens</td>
<td>384K tokens</td>
</tr>
<tr>
<td><strong>版本发布</strong></td>
<td>2026-04-24</td>
<td>2026-08-13</td>
<td>2026-07-31</td>
</tr>
</tbody>
</table>
<p><strong>核心结论：模型架构未发生变化。</strong> 1.6T 总参数、49B 激活参数、MoE 架构、1M 上下文窗口、384K 最大输出长度——这些硬件指标自 4 月 24 日预览版发布以来保持不变。与 7 月 31 日上线的 Flash 正式版类似，Pro 正式版的性能提升主要通过大规模后训练（Post-Training）调优实现。</p>
<p>换言之，Preview 版可视为 4 月的初始版本，Flash 正式版是 7 月经调校的轻量版本，本次 Pro 正式版则是 8 月经同轮调校的旗舰版本。此前 Flash 正式版曾在 Agent 基准测试中超越 Pro 预览版，此次 Pro 完成同轮后训练后，性能差距得以修正。</p>
<h2>十项基准测试对比：Preview 与正式版</h2>
<p>以下为多渠道交叉验证的官方评测对比数据。需注意：Preview 数据为 4 月份发布时的官方成绩，正式版数据为本次 0813 版本流出数据，目前尚无第三方完整复现结果。</p>
<table>
<thead>
<tr>
<th>基准测试</th>
<th>V4-Pro Preview</th>
<th>V4-Pro 正式版 (0813)</th>
<th>提升幅度</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Terminal Bench 2.1</strong></td>
<td>72.1</td>
<td>87.9</td>
<td>+21.9%</td>
</tr>
<tr>
<td><strong>NL2Repo</strong></td>
<td>38.5</td>
<td>61.5</td>
<td>+59.7%</td>
</tr>
<tr>
<td><strong>Cybergym</strong></td>
<td>52.7</td>
<td>83.3</td>
<td>+58.1%</td>
</tr>
<tr>
<td><strong>DeepSWE</strong></td>
<td>12.8</td>
<td>62.7</td>
<td><strong>+389.8%</strong></td>
</tr>
<tr>
<td><strong>Toolathlon Verified</strong></td>
<td>55.9</td>
<td>74.1</td>
<td>+32.6%</td>
</tr>
<tr>
<td><strong>Agent Last Exam</strong></td>
<td>16.5</td>
<td>25.7</td>
<td>+55.8%</td>
</tr>
<tr>
<td><strong>Automation Bench (Public)</strong></td>
<td>12.8</td>
<td>31.8</td>
<td>+148.4%</td>
</tr>
<tr>
<td><strong>DSBench-FullStack</strong></td>
<td>41.8</td>
<td>71.1</td>
<td>+70.1%</td>
</tr>
<tr>
<td><strong>DSBench-Hard</strong></td>
<td>31.1</td>
<td>67.2</td>
<td><strong>+116.1%</strong></td>
</tr>
<tr>
<td><strong>HLE (w/ tools)</strong></td>
<td>48.2</td>
<td>60.0</td>
<td>+24.5%</td>
</tr>
</tbody>
</table>
<p>重点指标分析：</p>
<ul>
<li><strong>DeepSWE 提升近 5 倍</strong>（12.8 → 62.7）。该基准为 DeepSeek 自研的软件工程测试，评估模型在真实工程场景中修改代码、修复缺陷的能力。Preview 版 12.8 分处于较低水平，正式版 62.7 分已超过 Anthropic 上一代旗舰 Opus 4.8 的 58.0 分，属于质变性提升。</li>
<li><strong>Terminal Bench 2.1 达到 87.9</strong>。Terminal Bench 是当前 AI Agent 领域引用较广的实操基准，评估模型在终端中执行命令、修改配置、修复问题的综合能力。正式版 87.9 分距榜单首位 Fable 5 的 88.0 分仅差 0.1 分。</li>
<li><strong>Cybergym 超越 Fable 5</strong>：83.3 分对比 Fable 5 的 83.1 分。该基准测试网络安全攻防能力（含攻击与防守思路），在安全领域超越闭源模型天花板，具备较高参考价值。</li>
<li><strong>Automation Bench 与 DSBench 系列翻倍提升</strong>：自动化工作流、全栈开发能力均实现倍数级增长，属于代际级别的性能跃升。</li>
</ul>
<p>总体来看，Preview 版与正式版之间存在显著性能差距。</p>
<h2>横向对比：与 Flash 正式版及竞品的性能比较</h2>
<p>以下为 0813 版本流出的官方评测横向对比数据，涵盖 Fable 5、Opus 4.8、GLM-5.2、Kimi K3 等主流旗舰模型：</p>
<table>
<thead>
<tr>
<th>评测项</th>
<th>V4 Pro 正式版</th>
<th>V4 Flash 正式版</th>
<th>GLM-5.2</th>
<th>Kimi-K3</th>
<th>Opus-4.8</th>
<th>Fable 5</th>
</tr>
</thead>
<tbody>
<tr>
<td>HLE (w/ tools)</td>
<td>60.0</td>
<td>—</td>
<td>54.7</td>
<td>56.0</td>
<td>57.9</td>
<td>63.0</td>
</tr>
<tr>
<td>Terminal Bench 2.1</td>
<td>87.9</td>
<td>82.7</td>
<td>81.0</td>
<td>88.3</td>
<td>85.0</td>
<td>88.0</td>
</tr>
<tr>
<td>NL2Repo</td>
<td>61.5</td>
<td>54.2</td>
<td>48.9</td>
<td>—</td>
<td>69.7</td>
<td>—</td>
</tr>
<tr>
<td>Cybergym</td>
<td>83.3</td>
<td>76.7</td>
<td>—</td>
<td>80.0</td>
<td>78.3</td>
<td>83.1</td>
</tr>
<tr>
<td>DeepSWE</td>
<td>62.7</td>
<td>54.4</td>
<td>46.2</td>
<td>67.5</td>
<td>58.0</td>
<td>70.0</td>
</tr>
<tr>
<td>Toolathlon-Verified</td>
<td>74.1</td>
<td>70.3</td>
<td>59.9</td>
<td>76.5</td>
<td>76.2</td>
<td>77.9</td>
</tr>
<tr>
<td>Agent Last Exam</td>
<td>25.7</td>
<td>25.2</td>
<td>23.8</td>
<td>27.6</td>
<td>25.7</td>
<td>—</td>
</tr>
<tr>
<td>AutomationBench</td>
<td>31.8</td>
<td>25.1</td>
<td>12.9</td>
<td>30.8</td>
<td>27.2</td>
<td>29.1</td>
</tr>
<tr>
<td>DSBench-FullStack</td>
<td>71.1</td>
<td>68.7</td>
<td>61.8</td>
<td>73.7</td>
<td>71.6</td>
<td>77.2</td>
</tr>
<tr>
<td>DSBench-Hard</td>
<td>67.2</td>
<td>59.6</td>
<td>54.5</td>
<td>63.0</td>
<td>71.7</td>
<td>68.3</td>
</tr>
</tbody>
</table>
<p>从数据来看，Pro 正式版的性能特点较为明确——<strong>单项指标未必全部领先，但各项均处于第一梯队</strong>。Terminal Bench 以 0.4 分之差落后于榜首 Kimi K3（88.3 分），但领先 Opus-4.8（85.0）3 分；Cybergym 以 83.3 分位居首位；DeepSWE 和 NL2Repo 两项代码工程指标均稳居前列；DSBench-Hard 67.2 分仅次于 Opus-4.8 的 71.7 分。</p>
<p><strong>"无明显短板"是 Agent 模型的核心竞争力之一</strong>。Agent 任务并非单题作答，而是涉及终端操作、代码修改、工具调用、数据解析、环境搭建等多步骤长链路执行，任一环节的能力缺陷都可能导致整条任务链失败。Preview 版在 DeepSWE 这类长代码任务中表现较弱（12.8 分对应较高的失败率），正式版补齐该短板后，模型在实际 Agent 场景中的可用性显著提升。</p>
<p>此外，Flash 正式版与 Pro 正式版的性能差距已从之前的"Flash 反超"回归为"Pro 略优"，两者分数差距约 5~10 分。Flash 尽管参数量仅为 Pro 的零头（284B vs 1.6T，激活 13B vs 49B），但性价比表现突出。</p>
<h2>性能提升的技术路径</h2>
<p>与 Flash 正式版的升级路径一致，Pro 正式版的性能提升主要来源于<strong>后训练优化</strong>。</p>
<p>官方尚未发布 Pro 正式版的技术报告，但从 Flash 正式版的更新日志可推断，Pro 采用了相同的升级策略——模型架构、参数量、激活参数均未调整，仅对后训练（Post-Training）流程进行了全面重做。类比而言，相当于同一台发动机，重新调校了变速箱、ECU 标定和悬挂系统，在硬件不变的前提下实现了性能提升。</p>
<p>这一现象表明，在 MoE + 后训练的技术路线下，模型的性能上限仍有较大挖掘空间。尤其在长链路 Agent 场景中，模型结构本身已能支撑需求，性能瓶颈更多在于面向代码工具链、终端操作、多步推理的大规模后训练——训练数据质量和调参策略对最终表现的影响，可能大于单纯增加参数量。</p>
<p>以下简要回顾 V4 系列的核心架构设计：</p>
<ul>
<li><strong>MoE（混合专家架构）</strong>：1.6T 参数拆分为数千个"专家子模型"，每次前向传播仅激活其中 64 个专家（总计 49B 参数），即拥有 1.6T 的知识容量，而推理计算量仅相当于 49B 参数模型。</li>
<li><strong>混合注意力（CSA + DSA + mHC）</strong>：用于降低长上下文场景的计算开销，在 100 万 token 场景下，单 token 推理计算量降至 V3.2 的约 10%，KV Cache 占用也显著降低。</li>
<li><strong>Engram 记忆技术</strong>：提升长上下文精确召回能力，在长代码库、长文档中检索细节的稳定性较前代有所提升。</li>
</ul>
<h2>新增能力：多模态支持、Responses API 及 Codex 接入</h2>
<p><strong>预览版为纯文本模型，正式版首次原生支持图像推理</strong>。据 36Kr 实测报道，DeepThink 引擎可在同一推理流程中分析截图、解读图片、处理图文混合文档。例如，用户提交一张报错截图，模型可直接读取图像中的代码、错误提示、堆栈信息，并给出修复方案——这一能力在实际开发场景中可省去 OCR 预处理步骤，提升工作效率。</p>
<p>接口能力方面，Pro 正式版与 Flash 正式版保持一致：</p>
<ul>
<li><strong>原生支持 Responses API（OpenAI）格式</strong>，Codex 系列工具（Codex CLI、ChatGPT 桌面端、VS Code Codex 插件）接入仅需修改 base_url，与 Flash 版本相同，提供自动配置脚本</li>
<li><strong>同时支持 Anthropic API 格式</strong>，Claude Code、OpenCode 等 Agent 工具修改一行 base_url 即可切换后端</li>
<li><strong>Thinking 模式开关</strong>（默认开启）、JSON Output、Tool Calls、对话前缀续写（Beta）、FIM 补全（Beta，仅非思考模式支持）均已支持</li>
</ul>
<p>总体而言，原有 Flash 版本的调用代码，仅需将 model 参数从 <code>deepseek-v4-flash</code> 改为 <code>deepseek-v4-pro</code> 即可运行，迁移成本较低。</p>
<h2>定价与并发：输出 6 元/百万 tokens，为 Flash 的三倍</h2>
<p>以下为官方定价页当前版本（2026-08-13）的价格信息：</p>
<table>
<thead>
<tr>
<th>计费项</th>
<th>V4 Pro 正式版（平峰）</th>
<th>V4 Flash 正式版（平峰）</th>
<th>倍数</th>
</tr>
</thead>
<tbody>
<tr>
<td>输入（缓存命中）</td>
<td>0.025 元</td>
<td>0.02 元</td>
<td>1.25x</td>
</tr>
<tr>
<td>输入（缓存未命中）</td>
<td>3 元</td>
<td>1 元</td>
<td><strong>3x</strong></td>
</tr>
<tr>
<td>输出</td>
<td>6 元</td>
<td>2 元</td>
<td><strong>3x</strong></td>
</tr>
<tr>
<td><strong>并发限制</strong></td>
<td><strong>500</strong></td>
<td><strong>2500</strong></td>
<td>1/5</td>
</tr>
</tbody>
</table>
<p><strong>Pro 定价约为 Flash 的三倍</strong>——输入未命中从 1 元升至 3 元，输出从 2 元升至 6 元，缓存命中价格差异较小。并发限制差异更为明显：Flash 为 2500，Pro 仅为 500，这与两者的产品定位一致——Flash 面向高频大规模请求，Pro 面向高价值长任务。</p>
<p><strong>高峰时段价格翻倍</strong>（正式版同步启用峰谷定价机制）：每日 9:00-12:00、14:00-18:00 共 7 小时，所有计费项统一翻倍，即 Pro 高峰时段输出价格为 12 元/百万 tokens。</p>
<p><strong>与海外竞品的横向价格对比</strong>（折算为美元）：</p>
<table>
<thead>
<tr>
<th>模型</th>
<th>输入（美元 / MT）</th>
<th>输出（美元 / MT）</th>
</tr>
</thead>
<tbody>
<tr>
<td>DeepSeek V4 Pro</td>
<td>0.435</td>
<td>0.87</td>
</tr>
<tr>
<td>Claude Opus 4.8</td>
<td>5.00</td>
<td>25.00</td>
</tr>
<tr>
<td>GPT-5.5</td>
<td>5.00</td>
<td>30.00</td>
</tr>
<tr>
<td>Fable 5</td>
<td>10.00</td>
<td>50.00</td>
</tr>
</tbody>
</table>
<p>V4 Pro 的输出价格约为 Opus 4.8 的 1/28、Fable 5 的 1/57，与 Grok 4.6 的输出价格（6 美元）基本持平。结合前述 Terminal Bench 2.1 跑分仅差 Fable 5 0.1 分的表现，"性能直追 Fable 5，价格六十分之一"的说法即来源于此。</p>
<p>需补充说明两点：</p>
<ol>
<li><strong>官方已在定价页发布涨价预告</strong>："计划近期整体上调 DeepSeek API 服务的定价，预计涨幅较大，请合理安排您的使用。" 当前定价的持续时间存在不确定性。</li>
<li><strong>SWE-bench Verified 80.6% 的数据</strong>未纳入正文分析，因该数据仅见于百科及第三方文章，未见官方对应说明，建议以正式日志为准。</li>
</ol>
<h2>Flash 与 Pro 的选型建议</h2>
<p>以下为不同场景下的选型参考：</p>
<table>
<thead>
<tr>
<th>使用场景</th>
<th>推荐模型</th>
<th>理由</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>日常对话、轻量编程、文案生成、问答</strong></td>
<td>Flash</td>
<td>Flash 正式版性能已超越 Pro Preview，价格为 1/3，性价比更高</td>
</tr>
<tr>
<td><strong>长代码仓库改造、多步终端操作、复杂 Agent 任务</strong></td>
<td>Pro</td>
<td>DeepSWE、Terminal Bench 等长链路指标优势明显</td>
</tr>
<tr>
<td><strong>数据分析、数据科学任务（含 DSBench 类）</strong></td>
<td>偏 Pro</td>
<td>DSBench-Hard/FullStack 存在性能差距，复杂数据任务完成率更高</td>
</tr>
<tr>
<td><strong>高并发低延迟 API 服务</strong></td>
<td>Flash</td>
<td>并发上限 2500 为 Pro 的 5 倍，价格为 1/3</td>
</tr>
<tr>
<td><strong>超长上下文任务（整本书 / 大型代码库）</strong></td>
<td>均可，预算充足选 Pro</td>
<td>两者均支持 1M 上下文，Pro 在长链路召回和推理稳定性方面更优</td>
</tr>
<tr>
<td><strong>安全攻防 / 红蓝对抗场景</strong></td>
<td>Pro</td>
<td>Cybergym 83.3 vs 76.7，存在一定优势</td>
</tr>
<tr>
<td><strong>预算敏感 / 个人开发者</strong></td>
<td>Flash 为主，复杂任务临时切换 Pro</td>
<td>多数任务 Flash 可胜任，成本更优</td>
</tr>
</tbody>
</table>
<p>综合判断：<strong>对于 95% 的日常任务，Flash 正式版已足够使用，Pro 的三倍价格在多数场景下并未带来对应的三倍体验提升</strong>。Pro 的优势集中在长链路 Agent、高难度代码工程、复杂数据科学等任务上——而许多用户感知到的"差距不大"，本质上是因为其任务难度尚未达到能体现这 5 分差距的程度。</p>
<p>此外，根据 36Kr 的实测文章，有两个实际使用中的注意事项：</p>
<ol>
<li><strong>Thinking 模式在大段代码生成场景下，推理 token 可能占输出的 80% 以上</strong>，反而压缩实际内容空间。该测试在 BFS/DFS/A* 可视化任务中发现，Thinking 模式下输出被截断至约一半，关闭 Thinking 后 54 秒即可完整运行。</li>
<li><strong>第三方智能指数存在分化</strong>：Artificial Analysis 给 V4-Pro-0813 的智能指数为 53 分，仅比 Flash-0731 的 52 分高 1 分——这也印证了"日常场景差距不明显"的判断。</li>
</ol>
<p>另外值得关注的是 <strong>DeepSeek Harness</strong> 推理框架，目前处于内测阶段。Harness 团队于 8 月 1 日公开招募内测用户，据内测参与者反馈表现突出。该推理框架对模型性能的影响可能比预期更大，前述跑分数据是否受益于 Harness 优化，目前尚无官方说明。待 Harness 正式发布后，Pro 的实际表现可能还有进一步提升空间。</p>
<h2>并发、API 迁移及实用建议</h2>
<h3>并发限制说明</h3>
<p>500 的并发上限对多数应用而言并不低，但需注意其与 Flash 2500 并发的定位差异。Pro 主要面向高价值长任务处理，若用于批量文本处理、数据清洗等场景，一方面可能面临并发瓶颈，另一方面高峰时段成本翻倍，经济性不佳。批处理任务建议错峰至夜间或周末执行，可节省一半成本；对延迟要求不高的任务，直接使用 Flash 可将成本降低约三分之二，且无需担忧并发限制。</p>
<h3>API 迁移指南</h3>
<p>若已在使用 DeepSeek API，切换至 Pro 仅需修改模型名称：</p>
<pre><code>from openai import OpenAI

client = OpenAI(api_key="&lt;你的API密钥&gt;", base_url="https://api.deepseek.com")

# 原 Flash 调用
response = client.chat.completions.create(
    model="deepseek-v4-flash",
    messages=[{"role":"user","content":"写个快速排序"}],
    temperature=1.0,
)

# 切换为 Pro，其余参数不变
response = client.chat.completions.create(
    model="deepseek-v4-pro",
    messages=[{"role":"user","content":"写个快速排序"}],
    temperature=1.0,
)
</code></pre>
<p>使用 Anthropic 格式的接入方式同理，仅需修改 base_url 为 <code>https://api.deepseek.com/anthropic</code>。</p>
<h3>Codex 接入</h3>
<p>Pro 同样支持 Codex 接入，配置方式与 Flash 一致，可使用以下 PowerShell 自动配置命令：</p>
<pre><code>irm https://cdn.deepseek.com/api-docs/codex-deepseek-setup-en.ps1 | iex
</code></pre>
<p>该脚本会备份原有配置，写入 models.json、修改 config.toml 并校验语法，出错时不会影响原有文件配置。</p>
<h3>成本优化建议</h3>
<ol>
<li><strong>批处理任务错峰至平峰时段</strong>（12:00-14:00、18:00-次日 09:00 及周末节假日），成本直接减半；</li>
<li><strong>将固定的 system prompt、知识库前缀置于消息数组最前端</strong>，最大化缓存命中率。Pro 版本缓存命中的输入价格仅为 0.025 元/百万 tokens，与未命中的 3 元相差约 120 倍；</li>
<li><strong>按任务复杂度分流使用 Flash / Pro</strong>：简单的意图识别、分类、摘要使用 Flash，输出成本为 1/3，长期可节省可观费用。</li>
</ol>
<h2>定价趋势与行业背景</h2>
<p>定价页中"整体上调 API 定价、预计涨幅较大"的预告值得关注。DeepSeek 已于 8 月 6 日发布相关公告，本次 Pro 正式版发布未同步调整价格，低价窗口期的持续时间尚不确定。DeepSeek 近期融资规模较大，估值增长较快，但算力成本始终是核心约束——V4 Flash 单模型在 OpenRouter 上的周调用量已突破 4.66 万亿 tokens，连续数周位居全球第一。海量调用叠加持续低价策略，背后的算力压力不容忽视。</p>
<p>峰谷定价机制本质上是通过价格杠杆进行资源调度：工作日白天算力紧张时加价，将非紧急批处理任务引导至夜间执行，以保障金融、代码研发、实时 Agent 等高优先级场景的稳定性。对开发者而言，与其关注价格波动，不如提前做好架构中的分级调度和缓存优化——即便后续涨价，充分准备的用户也能有效控制成本。</p>
<h2>总结</h2>
<p><strong>V4 Pro 正式版实现了实质性的代际性能跃升</strong>，而非小幅迭代：DeepSWE 提升近 5 倍、Terminal Bench 达到 87.9（距 Fable 5 仅 0.1 分）、Cybergym 超越 Fable 5，同时新增多模态支持和 Codex 接入能力。结合 6 元/百万 tokens 的输出价格，使其成为当前性价比最高的旗舰级 Agent 模型之一，价格远低于海外同级模型。</p>
<p><strong>但 Pro 并非所有场景的最优选择</strong>：在日常任务中，Flash 正式版的表现已超过 Pro 预览版，价格仅为 Pro 的三分之一，并发上限高出五倍。若现有任务使用 Flash 已能满足需求，无需为跑分差距支付额外成本。仅当遇到 Flash 频繁失败的长链路 Agent 任务时，再考虑切换至 Pro。</p>
<p>最后需说明：本文撰写于 2026 年 8 月 13 日，部分数据来源于社区渠道和第三方报道，官方尚未发布完整更新日志。建议将跑分数据作为参考，实际表现需结合自身业务场景进行验证。</p>
<p>以 Pro 正式版上线为标志，V4 系列的产品矩阵已基本完善——Flash 主打极致性价比，Pro 面向旗舰性能，两款模型的输出价格区间在 2 元至 6 元/百万 tokens，进一步拉低了全球 AI API 的定价门槛。对开发者而言，这一趋势总体是积极的。</p>
<h2>参考资料</h2>
<blockquote>
<p>本文信息整理自以下公开网络资料，<strong>来源为网络，不保证完全准确</strong>，仅供参考。各产品价格、政策、评分基准随时可能调整，请以 DeepSeek 官方 API 文档与最新公告为准。</p>
</blockquote>
<ul>
<li><a href="https://www.deepseek.com/">DeepSeek 官网（首页提示 V4 Pro 正式版发布）</a></li>
<li><a href="https://api-docs.deepseek.com/zh-cn/quick_start/pricing/">DeepSeek 官方 API 定价页（模型 &amp; 价格）</a></li>
<li><a href="https://www.51cto.com/article/852855.html">突发，DeepSeek V4 Pro 正式发布了（51CTO / 苏三）</a></li>
<li><a href="http://m.toutiao.com/group/7673192239073362438/">DeepSeek V4 Pro 正式版上线：1M 超大上下文 + 384K 输出，价格比 Flash 贵三倍</a></li>
<li><a href="https://36kr.com/p/3937317630147971">实测正式版 DeepSeek V4 Pro，补齐 Agent 和图像能力（极客公园 @ 36Kr）</a></li>
<li><a href="https://36kr.com/p/3937236905344390">梁文锋和马斯克对垒，DeepSeek V4 Pro 给全球最强上压力（凤凰网科技 @ 36Kr）</a></li>
<li><a href="https://devpress.csdn.net/beijing/6a7ca135662f9a54cb9bd297.html">DeepSeek V4 Pro 正式版实测：Agent 能力暴涨 5 倍，API 零成本迁移指南（CSDN 北京开发者社区）</a></li>
<li><a href="https://36kr.com/p/3937119315377283">DeepSeek V4 Pro 发布：除了多模态，满足我对模型的所有想象（鲸选AI @ 36Kr）</a></li>
<li><a href="https://developer.aliyun.com/article/1755411">DeepSeek V4 Pro 转正，性能逼近 Fable 5，价格仅六十分之一（阿里云开发者社区）</a></li>
<li><a href="https://ai.zol.com.cn/1231/12315262.html">DeepSeek V4-Pro-0813 发布：性能逼近 Fable 5 但实测分化，性价比存疑（中关村在线）</a></li>
<li><a href="https://finance.sina.com.cn/jjxw/2026-06-29/doc-inifauhw3773786.shtml.md">DeepSeek V4 正式版要来了，API 高峰时段价格翻倍（界面新闻 @ 新浪财经）</a></li>
<li><a href="https://m.baike.com/wiki/DeepSeek-V4-Pro/7632217736680259624">DeepSeek-V4-Pro 百科词条（含时间线和价格信息）</a></li>
</ul>
]]></content>
    <author><name>蓝影Shadow</name></author>
    <category term="技术"/>
  </entry>
  <entry>
    <title>EdgeOne到底有多强，和ESA有什么区别，怎么选</title>
    <link href="https://blog.yufurry.cn/posts/00000021/" rel="alternate" type="text/html"/>
    <id>https://blog.yufurry.cn/posts/00000021/</id>
    <published>2026-08-12T00:00:00.000Z</published>
    <updated>2026-08-12T00:00:00.000Z</updated>
    <summary>腾讯云 EdgeOne 和阿里云 ESA 均已开放免费套餐，本文对两款免费CDN产品进行对比分析，梳理差异点与选型建议。</summary>
    <content type="html"><![CDATA[<h2>产品定位与背景</h2>
<p>边缘安全加速平台是传统CDN产品的迭代形态，该类产品将静态加速、动态全站加速、WAFWeb应用防护、DDoS流量清洗、Bot风险治理、边缘计算等能力整合，以站点为管理单元实现统一管控。区别于传统方案中CDN、安全防护产品相互独立、多控制台运维的模式，EdgeOne与阿里云ESA均属于该赛道产品，产品定位对标Cloudflare。</p>
<h3>腾讯云 EdgeOne（EO）</h3>
<p>EdgeOne于2023年正式对外发布，产品演进自腾讯SCDN。核心特性为站点化管理，接入单站点后可自动覆盖全部下属子域名，无需像传统CDN逐域名配置、重复维护SSL证书，是腾讯云下一代CDN主力产品，官方定位对标Cloudflare。</p>
<h3>阿里云 ESA</h3>
<p>ESA全称Edge Security Acceleration边缘安全加速平台，由原DCDN全站加速升级重构而来，2024年完成产品更名迭代。原有DCDN时代静态、动态加速能力相互独立，ESA完成能力整合，同时强化原生安全模块。从API版本<code>2024‑09‑10</code>可以看出，本次迭代属于整体架构重构。</p>
<p>两家厂商对外披露节点规模均为全球3200+节点，中国大陆节点2300+。公开宣传数据仅作参考，实际节点质量、调度逻辑以实际访问效果为准。二者国内节点覆盖均处于行业第一梯队，与大量海外厂商“名义全球节点、国内落地资源匮乏”的情况存在明显区别。</p>
<h2>免费套餐能力对比</h2>
<p>下表整理两款产品免费套餐核心规格：</p>
<table>
<thead>
<tr>
<th>对比项</th>
<th>腾讯云 EdgeOne 免费版</th>
<th>阿里云 ESA 免费版</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>价格</strong></td>
<td>0 元/月</td>
<td>0 元/月</td>
</tr>
<tr>
<td><strong>加速流量</strong></td>
<td>不限量</td>
<td>不限量</td>
</tr>
<tr>
<td><strong>加速请求数</strong></td>
<td>不限量</td>
<td>不限量</td>
</tr>
<tr>
<td><strong>有效期</strong></td>
<td>长期有效，站点不主动删除则持续可用</td>
<td>长期有效，支持0元续费</td>
</tr>
<tr>
<td><strong>获取方式</strong></td>
<td>限量内测，通过兑换码或官方活动获取</td>
<td>控制台直接0元订购</td>
</tr>
<tr>
<td><strong>可领数量</strong></td>
<td>最多5个（兑换码+活动渠道）</td>
<td>单个UID限1个（可通过活动追加额度）</td>
</tr>
<tr>
<td><strong>站点数</strong></td>
<td>1个</td>
<td>1个</td>
</tr>
<tr>
<td><strong>子域名</strong></td>
<td>单站点支持200个子域名</td>
<td>支持1条泛域名，不支持独立子域名接入</td>
</tr>
<tr>
<td><strong>规则引擎</strong></td>
<td>20条规则配额</td>
<td>仅开放少量基础规则</td>
</tr>
<tr>
<td><strong>SLA服务等级</strong></td>
<td>无服务承诺</td>
<td>无服务承诺</td>
</tr>
<tr>
<td><strong>工单支持</strong></td>
<td>仅社区渠道支持</td>
<td>无工单支持</td>
</tr>
<tr>
<td><strong>大陆节点</strong></td>
<td>需要完成域名备案</td>
<td>需要完成域名备案</td>
</tr>
<tr>
<td><strong>速率限制</strong></td>
<td>大文件单线程限速，实测10MB以上文件约500KB/s</td>
<td>官方说明存在峰值带宽、单请求速率限制</td>
</tr>
</tbody>
</table>
<p>二者共性：零费用、流量请求不限、长期存续、不提供SLA保障；启用中国大陆节点均要求域名完成备案。需要注意，“不限流量”不代表无速率、业务场景约束，存在隐性限制。</p>
<h3>套餐获取门槛</h3>
<p>阿里云ESA免费版获取流程简单，账号完成实名认证后，可直接在控制台完成0元订购，单账号默认1个免费站点。参与第三方联合活动，例如宝塔面板合作活动，可以额外获取站点配额，适合多站点场景。</p>
<p>EdgeOne免费版目前仍处于限量内测，不支持直接购买，获取渠道分为三类：</p>
<ol>
<li>测速、边缘函数体验分享活动：完成页面测速、边缘函数体验，将结果分享至社交平台，单次任务解锁1份免费套餐，上限4份；</li>
<li>渠道兑换码：KOL合作、云厂商会员活动、开发者合作计划发放兑换码，兑换码具备7天有效期，单账号限使用一次；</li>
<li>仅主账号可申领，子账号、协作者账号无申领权限，账号需完成实名认证。</li>
</ol>
<p>同时EdgeOne也会与第三方社区开展合作发放免费额度，例如宝塔面板合作方案：<a href="https://docs.bt.cn/notices/free-edgeone-plan">docs.bt.cn/notices/free-edgeone-plan</a>。从产品迭代节奏看，免费套餐的申领门槛在持续放宽。</p>
<h3>站点与域名配额差异</h3>
<p>EdgeOne免费版单站点支持200个子域名，适合主域名下存在大量子业务、子项目的场景，全部域名可收纳在同一个站点内统一管理。</p>
<p>ESA免费版仅支持一条泛域名接入，泛域名可覆盖对应子域名，但无法针对单独子域名配置差异化缓存、访问控制规则，规则引擎配额也比较有限，多子域名精细化管理场景会受到制约。</p>
<p>EdgeOne具备套餐自动降级机制：付费套餐到期未续费，站点不会直接关停，自动降级至免费版继续对外提供服务，SLA保障失效，避免业务直接中断，适合担心忘记续费的使用者。</p>
<h3>速率约束说明</h3>
<p>两款产品均标注不限流量，但对大文件业务存在不同程度限制。
EdgeOne免费版官方明确说明，套餐不适用于视频、大文件分发业务。实测场景中，单文件大于10MB时，单线程下载速率被限制在500KB/s，多个第三方独立测试均复现该现象，大文件下载体验较差。</p>
<p>ESA免费版没有公开固定限速阈值，文档仅标注峰值带宽、单请求速率存在约束。社区实测，不存在类似EO的一刀切单文件限速，实际下载体验更多取决于源站带宽。但该套餐定位为个人项目、开发测试场景，若用于高流量生产业务，存在触发风控限流的风险。</p>
<h2>访问速度与节点实测表现</h2>
<p>实际访问性能受业务文件大小、访问地域、源站条件共同影响，不存在绝对优劣，分场景总结如下：</p>
<ol>
<li>
<p><strong>10MB以下小文件业务</strong>：EdgeOne表现占优。EdgeOne提供L2区域缓存，边缘节点未命中时优先读取区域缓存节点，同区域多边缘节点可以复用缓存资源，文件命中率更高。ESA免费版仅提供单层边缘缓存，冷门资源更容易触发回源，访问稳定性波动较大。ESA付费版本才开放完整三级缓存架构。</p>
</li>
<li>
<p><strong>10MB以上大文件业务</strong>：ESA更适合。EdgeOne免费版的单线程限速会严重影响大文件传输；ESA虽有带宽上限约束，但无固定单文件限速，前提是源站出口带宽充足。</p>
</li>
<li>
<p><strong>节点覆盖</strong>：国内节点数量ESA略占优势；海外节点EdgeOne覆盖更广，采用Anycast调度，主要落地香港、日本、新加坡节点，海外访问质量更好。ESA免费版不分配香港直连节点，未备案域名使用ESA免费版几乎无法实现国内正常访问。</p>
</li>
<li>
<p>缓存预热功能，两款产品免费版本均不开放，该能力仅面向付费套餐提供。</p>
</li>
</ol>
<h2>安全防护能力对比</h2>
<p>两款产品免费版均具备平台级DDoS清洗、基础WAF防护、基础CC防护、SSL证书自动申请与续期，对于个人站点基础安全需求可以满足。</p>
<p>EdgeOne免费版开放更多面向站长的实用安全能力：</p>
<ul>
<li>AI爬虫管控：可对GPTBot、ClaudeBot等AI爬虫执行拦截、验证、放行策略，同时保障正规搜索引擎正常收录；</li>
<li>预置漏洞防护规则集，直接拦截常见Web漏洞扫描行为；</li>
<li>多维度访问管控，支持IP、地域、Referer、UA、ASN维度配置访问策略；</li>
<li>自适应CC频控防护，缓解源站被恶意访问打满的风险。</li>
</ul>
<p>ESA免费版安全能力偏向基础，WAF、DDoS基础能力可用，但Bot管理、托管防护规则等高级能力需要升级至标准版。ESA的优势在于源站防护，付费版本支持边缘节点与源站之间加密隧道，实现源站IP隐藏。</p>
<h2>边缘生态附加能力</h2>
<p>很多使用者仅将两款产品视作CDN，实际上二者都属于完整边缘平台，附带大量边缘能力。</p>
<h3>静态站点托管</h3>
<p>EdgeOne Pages支持对接GitHub仓库，实现源码自动构建部署，自动绑定域名、签发证书。同时支持Pages Functions边缘函数、KV键值存储。静态博客、文档站点可以直接部署，还可以通过边缘能力实现评论、访问统计、站内搜索等动态逻辑，无需自建服务器。</p>
<p>ESA同样提供Pages静态托管，支持一键部署博客、演示项目，也支持边缘函数。但整体生态、文档完善度弱于EdgeOne Pages。</p>
<h3>边缘函数与边缘容器</h3>
<p>两者都提供边缘函数，在边缘节点执行JS代码，免运维自动弹性扩缩。EdgeOne免费版每月提供300万次函数调用额度，超出后函数规则失效。ESA免费版同样开放基础边缘函数能力。</p>
<p>额外的，ESA支持边缘容器，可以直接运行容器镜像，适合复杂重负载业务，该能力主要面向企业级场景；EdgeOne当前以边缘函数为主要方案。</p>
<h3>四层代理L4</h3>
<p>四层代理用于TCP/UDP协议流量转发，可实现非HTTP业务的就近接入、DDoS防护，适用于游戏、实时音视频等业务。该能力主要面向企业付费客户，普通个人站点使用场景较少。</p>
<h3>DNS托管与证书</h3>
<p>两款产品都支持DNS托管，NS接入模式下解析、加速、证书全部在同一控制台完成，同时解析具备抗DDoS能力。ESA支持CNAME拉平，企业版本支持泛域名证书。</p>
<blockquote>
<p>提示：如果已经在其他DNS服务商配置分区解析，建议使用CNAME接入，不要切换NS，避免解析逻辑冲突。</p>
</blockquote>
<h3>日志与其他能力</h3>
<p>EdgeOne免费版支持基础社区查询，完整离线日志、实时日志属于增值付费能力。ESA免费版不支持离线日志导出。版本环境管理、人机验证滑块等能力，ESA需要升级至标准版及以上。</p>
<h2>接入流程与常见踩坑点</h2>
<p>两款产品都支持NS接入（修改域名DNS服务器）与CNAME接入（原有DNS服务商添加CNAME记录），根据自身DNS使用情况选择。</p>
<p>中国大陆节点强制要求域名备案；未备案域名只能选择全球（不含中国大陆）加速区域。EdgeOne国际站免费版宣传无需备案即可国内访问；中国站必须备案；ESA免费版未备案基本不可用。</p>
<p>实践中高频遇到的问题：</p>
<ol>
<li>ESA免费版站点提交后存在审核流程，部分场景最长可达2个工作日，业务紧急需要留意；</li>
<li>EdgeOne在遭遇大流量攻击场景，存在边缘节点临时缩减的现象，会自动恢复，但高峰期访问质量下降；</li>
<li>免费套餐定位为测试、个人非核心业务，不建议承载生产业务。已有社区案例ESA免费版大流量场景触发风控限流；</li>
<li>产品政策、活动、配额会持续迭代，开通前务必查阅官方最新文档。</li>
</ol>
<h2>付费套餐参考</h2>
<p>免费套餐仅适合测试与个人小站，业务规模上涨之后需要切换付费版本，价格对比如下：</p>
<table>
<thead>
<tr>
<th>档次</th>
<th>腾讯云 EdgeOne</th>
<th>阿里云 ESA</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>入门</strong></td>
<td>个人版 29.9 元/月（50GB / 300万次请求）</td>
<td>基础版 9.9 元/月（50GB）</td>
</tr>
<tr>
<td><strong>中档</strong></td>
<td>基础版 399 元/月（500GB / 2000万次请求）</td>
<td>标准版 375 元/月（500GB）</td>
</tr>
<tr>
<td><strong>高档</strong></td>
<td>标准版 3800 元/月（3TB / 5000万次请求）</td>
<td>高级版 3600 元/月（3000GB）</td>
</tr>
</tbody>
</table>
<p>同档位ESA定价更低，拦截流量、HTTPS、WAF请求不计费，遭受攻击时不会产生高额账单。EdgeOne付费产品优势体现在功能完备度、智能加速策略、海外链路质量、Pages生态，适合愿意为特性付费的用户。</p>
<h2>选型参考</h2>
<p>结合业务场景给出选型参考：</p>
<table>
<thead>
<tr>
<th>使用场景</th>
<th>推荐选择</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>无备案，希望使用免费版访问国内</td>
<td>EdgeOne国际站免费版</td>
<td>海外Anycast调度，香港、日本、新加坡节点承接国内访问；ESA免费版无香港直连，不备案可用性差</td>
</tr>
<tr>
<td>已备案，个人博客、文档类小流量站点</td>
<td>EdgeOne优先</td>
<td>小文件缓存命中率高，单站点支持200子域名，安全附加能力丰富</td>
</tr>
<tr>
<td>图床、下载站等大文件分发业务</td>
<td>ESA</td>
<td>无EdgeOne的单文件强制限速</td>
</tr>
<tr>
<td>需要维护大量独立站点</td>
<td>EdgeOne</td>
<td>最多可获取5份免费套餐</td>
</tr>
<tr>
<td>需要零成本静态托管+边缘能力</td>
<td>EdgeOne Pages</td>
<td>对接GitHub自动构建部署，配套KV、边缘函数</td>
</tr>
<tr>
<td>正式付费生产业务</td>
<td>ESA</td>
<td>同规格成本更低，攻击场景不会放大账单</td>
</tr>
</tbody>
</table>
<h3>重要提示</h3>
<ol>
<li>免费套餐官方定位是个人项目、开发测试，不提供SLA服务保障，严禁直接用于核心生产业务，存在限流、关停风险。</li>
<li>两套产品可以同时使用，可根据域名分开部署，也可以通过智能DNS做流量分流，组合使用补足短板。</li>
</ol>
<h2>总结</h2>
<p>面向个人非核心业务，EdgeOne免费版综合能力更强，虽然申领流程繁琐，但子域名配额充足、小文件加速效果优秀、海外访问质量好，附带Pages静态托管能力。
大文件分发场景，或者后续计划采购付费版本，ESA性价比优势明显，开通简单，成本可控。
无论选择哪一款，想要启用中国大陆节点，域名备案是硬性要求。</p>
<blockquote>
<p>注意：两款产品迭代速度快，文中配额、限制、活动规则随时可能调整，实际使用请以官方文档为准。</p>
</blockquote>
<h2>参考资料</h2>
<blockquote>
<p>本文信息整理自公开网络资料，信息仅供参考，不保证完全准确，所有产品规则请查阅官方最新文档。</p>
</blockquote>
<ul>
<li><a href="httpshelp.aliyun.comzhedge-security-accelerationesaproduct-overviewfree-plan">阿里云 ESA 免费套餐（官方文档）</a></li>
<li><a href="httpshelp.aliyun.comzhedge-security-accelerationesaproduct-overviewpackage-function-comparison">阿里云 ESA 套餐选型对比（官方文档）</a></li>
<li><a href="httpscloud.tencent.com.cndocumentproduct155294165">腾讯云 EdgeOne 套餐选型对比（官方文档）</a></li>
<li><a href="httpsedgeone.aizhdocument70405">EdgeOne 免费版套餐使用说明（官方文档）</a></li>
<li><a href="httpscloud.tencent.comactproeo-freeplan">EdgeOne 免费套餐活动页（中国站）</a></li>
<li><a href="httpsedgeone.aizhget-free-plan">EdgeOne 免费套餐测速分享活动（国际站）</a></li>
<li><a href="httpsdeveloper.aliyun.comarticle1704294">阿里云 ESA 免费版领取教程（开发者社区）</a></li>
<li><a href="httpsblog.shiina.fun20250921aliyun-esa-vs-tencent-edgeone-free-cdn-china-2025-review">阿里云 ESA vs 腾讯云 EdgeOne 免费 CDN 对比评测（2025.9）</a></li>
<li><a href="httpsblog.moguq.topposts26020501">2026 年 ESA vs EdgeOne 对比测试</a></li>
<li><a href="httpsblog.yeqing.netESA-china">阿里云中国站 ESA 免费版白嫖攻略</a></li>
<li><a href="httpm.toutiao.comgroup7670092767774671386">阿里云 ESA 免费套餐收紧、流量阈值相关报道</a></li>
</ul>
]]></content>
    <author><name>蓝影Shadow</name></author>
    <category term="技术"/>
  </entry>
  <entry>
    <title>DeepSeek-V4-Flash 正式版 API 公测</title>
    <link href="https://blog.yufurry.cn/posts/00000020/" rel="alternate" type="text/html"/>
    <id>https://blog.yufurry.cn/posts/00000020/</id>
    <published>2026-07-31T00:00:00.000Z</published>
    <updated>2026-07-31T00:00:00.000Z</updated>
    <summary>就在就在不久刚才 DeepSeek-V4-Flash 正式版 API 发布公测了，借机来讲一下他的能力</summary>
    <content type="html"><![CDATA[<h2>前言</h2>
<p>就在今天（2026 年 7 月 31 日），DeepSeek 官方发布了 <strong>DeepSeek-V4-Flash 正式版 API 公测</strong>。距离 4 月 24 日 V4 预览版发布过去大概三个月，这次更新的重点关键词只有一个——<strong>Agent 能力大幅跃升</strong>。</p>
<p>这次官方直接公布了 9 项基准测试成绩，多项指标远超此前发布的 V4-Pro-Preview，甚至可以说是"以下犯上"了，颇有当初 V4 发布时"倒反天罡"的味道。</p>
<p><img src="/posts_img/2026/07/00000020/p-00000020-2.webp" alt="" /></p>
<h2>先简单回顾一下 V4 系列</h2>
<p>2026 年 4 月 24 日，DeepSeek 无预警发布了 V4 系列，包含 Pro 和 Flash 两个版本：</p>
<table>
<thead>
<tr>
<th>对比项</th>
<th>V4-Pro</th>
<th>V4-Flash</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>总参数</strong></td>
<td>1.6T</td>
<td>284B</td>
</tr>
<tr>
<td><strong>激活参数</strong></td>
<td>49B</td>
<td>13B</td>
</tr>
<tr>
<td><strong>架构</strong></td>
<td>MoE</td>
<td>MoE</td>
</tr>
<tr>
<td><strong>上下文</strong></td>
<td>1M tokens</td>
<td>1M tokens</td>
</tr>
<tr>
<td><strong>最大输出</strong></td>
<td>384K tokens</td>
<td>384K tokens</td>
</tr>
</tbody>
</table>
<p>Pro 主打性能上限，对标闭源旗舰模型；Flash 则在参数规模上大幅缩小，换取更低延迟和更低成本，主打性价比。而这次正式版的 Flash，把 Agent 能力拉到甚至超越了 Pro 预览版的水平——这就很有意思了，毕竟两边参数规模差了将近一个数量级。</p>
<h2>九项基准测试成绩单</h2>
<p>官方更新日志披露的完整成绩如下：</p>
<table>
<thead>
<tr>
<th>基准测试</th>
<th>得分</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Terminal Bench 2.1</strong></td>
<td>82.7</td>
</tr>
<tr>
<td><strong>NL2Repo</strong></td>
<td>54.2</td>
</tr>
<tr>
<td><strong>Cybergym</strong></td>
<td>76.7</td>
</tr>
<tr>
<td><strong>DeepSWE</strong></td>
<td>54.4</td>
</tr>
<tr>
<td><strong>Toolathlon Verified</strong></td>
<td>70.3</td>
</tr>
<tr>
<td><strong>Agent Last Exam</strong></td>
<td>25.2</td>
</tr>
<tr>
<td><strong>Automation Bench (Public)</strong></td>
<td>25.1</td>
</tr>
<tr>
<td><strong>DSBench-FullStack</strong>（内部测试集）</td>
<td>68.7</td>
</tr>
<tr>
<td><strong>DSBench-Hard</strong>（内部测试集）</td>
<td>59.6</td>
</tr>
</tbody>
</table>
<p>几个值得注意的点：</p>
<ul>
<li><strong>Terminal Bench 2.1 拿到 82.7</strong>，官方此前公布 V4-Pro-Preview 在 Terminal Bench 2.0 上是 67.9 分。虽然 2.0 和 2.1 不是同一版本测试集，直接对比不完全公平，但一个激活参数仅 13B 的轻量版能跑到这个分数，已经很能说明问题了。</li>
<li><strong>Cybergym 76.7</strong>，这是网络安全攻防模拟测试，说明模型在安全对抗场景下也有不错的发挥。</li>
<li><strong>DSBench-FullStack 和 DSBench-Hard</strong> 是官方内部的测试集，分别是全栈开发测试和 Coding Agent 难题测试。作为内部测试集公开出来，侧面印证了 DeepSeek 想把 Flash 打造成开发者与 Agent 应用首选底座的意图。</li>
</ul>
<p>官方还披露了测试条件：公开基准集中的 Code Agent 任务，使用了即将发布的 <strong>DeepSeek Harness 极简模式</strong>作为框架测试，max 档位，top_p=0.95，temperature=1.0。这里有个细节值得注意——DeepSeek 自研的 Harness 测试框架是首次以正式命名亮相，说明官方不只是想训练更强的模型，还想建立一套标准化的 Agent 评测生态。</p>
<h2>模型结构没变，但是变得更强了</h2>
<p>官方明确说明：<strong>DeepSeek-V4-Flash-0731 的模型结构、尺寸与 V4-Flash-preview 保持一致，仅重新进行了后训练。</strong></p>
<p>底座没变，变的是训练方法。这其实释放了一个信号：在 Agent 能力这条赛道上，后训练策略的优化空间依然巨大。同样的模型架构，经过更精细的后训练调优就能在基准测试上产生质变——对行业来说，这比单纯堆参数更具参考意义。</p>
<p>顺带一提，V4 系列在长上下文效率上做了一系列激进优化，在 100 万 token 场景下 Flash 的单 token 推理计算量仅为 V3.2 的 10% 左右，KV Cache 占用也大幅下降，百万上下文不再是"富人专属"。这也是 Flash 能把价格压到这么低的原因之一。</p>
<h2>原生支持 Responses API，适配 Codex</h2>
<p>正式版 V4-Flash 原生支持 OpenAI 的 <strong>Responses API 格式</strong>，并针对性适配了 <strong>Codex</strong>。</p>
<p>所有 Codex 客户端——Codex CLI、ChatGPT 桌面端、VS Code 的 Codex 插件——共用同一份配置文件，配置一次即可全部生效。DeepSeek 官方还提供了 PowerShell 一行命令的自动配置脚本：</p>
<pre><code>irm https://cdn.deepseek.com/api-docs/codex-deepseek-setup-en.ps1 | iex
</code></pre>
<p>脚本会自动备份原有配置、写入 <code>models.json</code> 模型目录（声明上下文窗口、推理档位、工具调用格式等元数据）、修改 <code>config.toml</code> 并在写回前校验语法，出问题就中止不碰你的文件，还是挺稳的。</p>
<p>需要说明的是，目前只有 <code>deepseek-v4-flash</code> 支持接入 Codex，V4-Pro 预计要到 8 月初才支持。</p>
<h2>价格</h2>
<p>Flash 一如既往地走极致性价比路线，官方价格如下（百万 tokens，平峰时段）：</p>
<table>
<thead>
<tr>
<th>计费项</th>
<th>平峰价格</th>
<th>高峰价格</th>
</tr>
</thead>
<tbody>
<tr>
<td>输入（缓存命中）</td>
<td>0.02 元</td>
<td>0.04 元</td>
</tr>
<tr>
<td>输入（缓存未命中）</td>
<td>1 元</td>
<td>2 元</td>
</tr>
<tr>
<td>输出</td>
<td>2 元</td>
<td>4 元</td>
</tr>
<tr>
<td><strong>并发限制</strong></td>
<td><strong>2500</strong></td>
<td>-</td>
</tr>
</tbody>
</table>
<p>对比 V4-Pro（平峰输入缓存命中 0.025 元、未命中 3 元、输出 6 元），Flash 的性价比优势还是很明显的，尤其是高并发场景下 2500 的并发上限非常宽松。</p>
<h3>峰谷定价</h3>
<p>V4 系列还引入了一个比较有意思的机制——<strong>峰谷分时定价</strong>，直接把电力市场的逻辑搬到了算力市场：</p>
<ul>
<li><strong>高峰时段</strong>：工作日北京时间每日 9:00-12:00 和 14:00-18:00（每天 7 小时）</li>
<li><strong>平峰时段</strong>：其余 17 小时，加上周末与节假日全天</li>
</ul>
<p>高峰时段所有计费项统一<strong>翻倍</strong>，相当于给 token 装上了"计价器"。大模型 API 定价从 GPT-3 时代到现在一直都是一口价，DeepSeek 算是行业里第一个吃螃蟹的。</p>
<p>这里有两个细节需要注意：</p>
<ol>
<li>峰谷计费<strong>仅面向开发者 API 调用</strong>，C 端用户用 App/Web 聊天价格不变</li>
<li>平峰时段的价格与此前的定价保持一致，并不是先涨价再"做优惠"——高峰多付一倍，换来的是一份优先算力保障</li>
</ol>
<p>对开发者来说，这个机制反而给了省钱的思路：数据清洗、文档总结、离线批量处理这类不要求实时返回的任务，错峰到夜间或周末跑成本直接减半；实时 Agent、在线客服这种吃高峰溢价的场景，就只能靠优化 prompt 长度和缓存来压成本了。再加上缓存命中的输入价格低到几乎可以忽略（0.02 元/百万），把固定的 system prompt、知识库前缀做好缓存，实际支出还能再压一截。</p>
<h2>升级范围</h2>
<p>需要注意，本次升级<strong>仅覆盖 V4-Flash 的 API 接口</strong>：</p>
<ul>
<li>已升级：DeepSeek-V4-Flash API</li>
<li>未升级：DeepSeek-V4-Pro API</li>
<li>未升级：APP / WEB 端模型</li>
<li>即将发布：DeepSeek-V4-Pro 正式版（官方表示"将尽快发布"，网传可能在 8 月初）</li>
</ul>
<p>所以如果你平时只用 DeepSeek 的 App 或网页端，今天打开对话窗口体验和昨天不会有任何区别。另外旧的 <code>deepseek-chat</code> 和 <code>deepseek-reasoner</code> 两个模型名已经在 7 月 24 日弃用，现在分别对应 <code>deepseek-v4-flash</code> 的非思考模式与思考模式。</p>
]]></content>
    <author><name>蓝影Shadow</name></author>
    <category term="技术"/>
  </entry>
  <entry>
    <title>关于&quot;舞萌DX&quot;机台的技术分享 V2</title>
    <link href="https://blog.yufurry.cn/posts/00000019/" rel="alternate" type="text/html"/>
    <id>https://blog.yufurry.cn/posts/00000019/</id>
    <published>2026-07-30T00:00:00.000Z</published>
    <updated>2026-07-30T00:00:00.000Z</updated>
    <summary>之前就发过一篇关于舞舞萌DX机台的文章，查这篇文章重点补充一下一些没有讲到的细节（其实就是没东西写了水一下嘻嘻）</summary>
    <content type="html"><![CDATA[<h2>前情提要</h2>
<p><a href="/posts/00000004/">之前的文章</a></p>
<h2>新批次机台的变化</h2>
<p>如果观察的仔细的话不难发现，新批次的机台在硬件配置上有一些变化。包括去除了国服用不了的摄像头，基板升级为HX2.1等。</p>
<p>移除玩家摄像头可以算得上是一件好事，因为USB hub供电不足的问题导致机台启动有概率出现3100错误的可能性会降低一些，与其当作一个无用的摆设放在那里不如直接移除，缺点就是国服基本是再也没办法启用这个功能了，其次就是不能放东西了（）</p>
<p>ALLS HX2 升级为 HX2.1无疑是有性能上的提升的，具体提升了多少就不得知了，也不排除是供应链管理大师（）</p>
<p>HX2 与 HX2.1 的区别如下：</p>
<table>
<thead>
<tr>
<th>变化点</th>
<th>HX2</th>
<th>HX2.1</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>主板</strong></td>
<td>技嘉MCH31AM-S2 H310</td>
<td>技嘉MCH31AM-S2 H310</td>
</tr>
<tr>
<td><strong>CPU</strong></td>
<td>Intel Core i3-8100</td>
<td>Intel Core i3-8100</td>
</tr>
<tr>
<td><strong>内存</strong></td>
<td>2x4GB</td>
<td>2x4GB</td>
</tr>
<tr>
<td><strong>显卡</strong></td>
<td>NVIDIA GeForce GTX1050 Ti</td>
<td>NVIDIA GeForce GTX1650 Ti</td>
</tr>
<tr>
<td><strong>SSD</strong></td>
<td>TDK GBDisk GS1 120GB</td>
<td>TDK GBDisk GS1 120GB</td>
</tr>
<tr>
<td><strong>HDD</strong></td>
<td>WD5000LUCT 500GB</td>
<td>WD5000LUCT 500GB</td>
</tr>
</tbody>
</table>
<p>可以看得出来除显卡之外基本没有什么大变化，主要还是因为 1050 Ti 停产导致的</p>
<p>基板升级我目前只确定国服进行了升级，至于日服/国际服有没有更换就不知道了，目前没有查询到相关资讯</p>
<p>我附近就有一台已经升级为 HX2.1 的机台，但个人体验下来没有感觉有多大提升，感觉还是因为 HX2 不够用了才升级的（）</p>
<h2>按键，屏幕与触摸</h2>
<h3>1.屏幕</h3>
<p>在上个版本的文章里讲过为什么日服的屏幕不需要很大力拍就会闪白，但经过测试以及去神秘地点游玩神秘机台的体验下来发现可能造成这个问题的因素更多</p>
<p>无论是国际服的框体还是日服的框体都给我一种没有国服结实的感觉，有种软趴趴的感觉，并且其实去看了国际服的框体以及日服的框体发现触摸面板和屏幕的间距其实与国服都差不太多，并且再怎么说触摸面板也是一块玻璃，玻璃形变再大这么大的间距大概率也不会直接打到屏幕上，所以可以怀疑是固定触摸面板的金属框与国服的厚度或质量不一导致的，毕竟国服的框体都是日本那边给数据来中国做， Made in China的质量说是（）</p>
<p>当然除了这个金属框以外也有可能是固定金属框与屏幕的那块木板质量不一导致的，包括国际服和日服的屏幕与国服使用的都是不同的，也不排除是屏幕质量的问题，比如拍击按键与屏幕的时候力量直接通过金属框传导到后面的木板上，如果木板造成的形变比较大可能就会导致屏幕前后移动，但是又由于固定屏幕仅靠几颗螺丝与五金件而不是直接将屏幕固定在背板上，如果屏幕质量不好容易变形的话就会导致液晶面板偏移砸到背光上，就会导致闪白，国服可能因为木板与屏幕都比较结实质量比较好因此用同样的力度拍打日服框体的屏幕会闪白，而国服不会，Made in China这一块</p>
<p>新一点的机子屏幕用的都是京东方的屏幕，型号是 <strong>DV430FHM-NN1</strong>，屏幕的分辨率是 <strong>1920x1080</strong>，比例是 <strong>16:9</strong>，刷新率为是 <strong>60Hz</strong></p>
<p><img src="/posts_img/2026/07/00000019/p-00000019-2.webp" alt="" /></p>
<p><img src="/posts_img/2026/07/00000019/p-00000019-3.webp" alt="" /></p>
<h3>2.按键与触摸</h3>
<h4>2.1 按键</h4>
<p>说实话国服原装按键的手感我个人感觉体验下来是不如日框的，我会更喜欢日框那种偏软的手感，而且按键声音是脆脆的比较舒服，国框的按键声音是那种沉闷的，拍下去不干脆</p>
<p>体验过了日框就回不去了，按键声音非常悦耳，但其实国服的按键也是有办法优化使得更接近日框原装按键的效果的</p>
<p>先说按键手感，最直接的办法就是更换弹片，直接在各个渠道搜索日服的铜弹片即可，有能力的也可以直接在日本SEGA购买，或者小黄鱼/某宝都能买到</p>
<p>其次就是怎么让按键变脆，首先国服按键声音沉闷的问题就是因为使用了Eva泡棉作为减震垫，它会吸收掉大部分的力量且Eva泡棉是有大幅度压缩的，这会导致有种粘滞的感觉，我自己给手台和朋友的窝使用的方案就是购买华立原装按键然后把减震垫撕掉更换成橡胶垫，橡胶垫的尺寸是宽度10mm，厚度1mm，替换掉原来的Eva泡棉，但是要注意橡胶本身表面是会有一点点粘性的，尤其是天气热的时候容易有种出胶的感觉，所以建议在橡胶表面粘一层胶带比如PET胶带</p>
<p>当然还有一个更直接的办法就是直接购买SEGA的按键，可以通过一些神秘渠道购买到也可以直接到日本SEGA官方购买到（大陆很难买到就是了）</p>
<p>（华立官方的配件是真的贵，弹片30（CNY）/1片，光眼30（CNY）/1个，按键壳80（CNY）/1个，按键装饰框80（CNY）/1个，包括按键固定框与底板都是80元（CNY）一个，触摸传感器面板那块玻璃要7500元（CNY））</p>
<p><img src="/posts_img/2026/07/00000019/p-00000019-4.webp" alt="" /></p>
<h4>2.2 触摸</h4>
<p>相信机龄较大的机台绝大多数都有一个问题就是触摸屏的金属框生锈，打完1PC白手套都变成黄手套，相比于花大价钱去购买一块金属框，更常见的解决办法是粘贴防锈胶带到金属框边缘</p>
<p>这里分享一个解决方案来自【菜子头Nanoko】<a href="https://www.bilibili.com/opus/966948621883801639">https://www.bilibili.com/opus/966948621883801639</a></p>
<p>不过我使用的一个方案更加硬核，前段时间某地区机厅委托我过去给机厅舞萌与中二保养的时候就使用了这套方案，总的来讲就是使用角磨机打磨除锈，然后重新涂刷金属防锈漆，整体效果还是挺好的不过由于当时没有拍照所以没法展示，不过需要注意的是由于内侧是有隔离金属框与触摸玻璃的abs塑料垫块的，固定的位置不要打磨过度，否则容易导致垫块上紧后变形玻璃无法很好的固定</p>
<p><img src="/posts_img/2026/07/00000019/p-00000019-5.webp" alt="" /></p>
]]></content>
    <author><name>蓝影Shadow</name></author>
    <category term="技术"/>
  </entry>
  <entry>
    <title>使用 Napcat &amp; AstrBot 搭建一个属于自己的 QQ 机器人！</title>
    <link href="https://blog.yufurry.cn/posts/00000018/" rel="alternate" type="text/html"/>
    <id>https://blog.yufurry.cn/posts/00000018/</id>
    <published>2026-07-08T00:00:00.000Z</published>
    <updated>2026-07-08T00:00:00.000Z</updated>
    <summary>本教程将讲解如何在 Linux 服务器上用 Docker 部署 AstrBot 和 NapCat，搭建一个属于自己的 QQ AI 机器人</summary>
    <content type="html"><![CDATA[<h2>警告！！！</h2>
<p>使用私人账号搭建 QQ 机器人本质是属于违规行为，可能会导致你的账号被风控，请勿用于违法用途！若你的账号很不幸被风控了我们不负责任！</p>
<h2>前言</h2>
<p>最近 AI 大模型发展迅速，各种 QQ 机器人也越来越多。之前一直想搭建一个自己的 QQ 机器人，但大多数方案配置起来都比较麻烦，又要装环境又要配协议，花费不少时间还不一定能跑起来。</p>
<p>后来发现了 AstrBot + NapCat 这个组合，配置起来非常方便。AstrBot 负责机器人的大脑（对接 AI 模型和管理各种功能），NapCat 负责处理 QQ 消息的收发，两者通过 OneBot 协议通信，而且全部可以用 Docker 一键部署。</p>
<h2>什么是 AstrBot 和 NapCat</h2>
<p>简单来说，<strong>AstrBot</strong> 是一个聊天机器人框架，支持接入各种 AI 大模型（DeepSeek、OpenAI、Gemini 等等），还有插件系统和 Web 管理面板，功能非常丰富。</p>
<p><strong>NapCat</strong> 则是 QQ 的协议适配器，负责模拟 QQ 客户端的登录和消息收发，相当于一座桥，把 QQ 和 AstrBot 连接起来。</p>
<p>两者的配合流程大概是这样：</p>
<pre><code>你发 QQ 消息 → NapCat 接收 → AstrBot 处理 → 调用 AI 大模型 → AstrBot 生成回复 → NapCat 发回 QQ
</code></pre>
<h2>准备工作</h2>
<p>在开始之前，你需要准备好以下这些东西：</p>
<ol>
<li><strong>一台 Linux 服务器</strong>（推荐至少 2C2G，系统建议 Ubuntu 20.04+ 或 CentOS 7+）</li>
<li><strong>一个 QQ 号</strong>（用来做机器人，建议用日常活跃的老号，新号容易被风控）</li>
<li><strong>一个大模型 API Key</strong>（DeepSeek 可以去 <a href="https://platform.deepseek.com">platform.deepseek.com</a> 注册，注册即赠送额度）</li>
<li><strong>安装好 Docker 和 Docker Compose</strong></li>
</ol>
<h2>开始部署</h2>
<h3>1. 创建项目目录</h3>
<p>首先 SSH 连接到你的服务器，创建一个目录来放我们的配置文件：</p>
<pre><code>mkdir -p /opt/astrbot &amp;&amp; cd /opt/astrbot
</code></pre>
<h3>2. 编写 docker-compose.yml</h3>
<p>在这个目录下创建一个 <code>docker-compose.yml</code> 文件，内容如下：</p>
<pre><code>version: "3.8"

services:
  astrbot:
    image: soulter/astrbot:latest
    container_name: astrbot
    ports:
      - "6185:6185"
    volumes:
      - ./data:/AstrBot/data
      - ./astra_db:/AstrBot/astra_db
    restart: always
    networks:
      - astrbot-net

  napcat:
    image: mlikiowa/napcat-docker:latest
    container_name: napcat
    ports:
      - "6099:6099"
      - "6195:6195"
      - "6199:6199"
    environment:
      - NAPCAT_UID=0
      - NAPCAT_GID=0
      - WS_ENABLE=true
      - WS_URL=ws://astrbot:6199/ws
    volumes:
      - ./napcat/config:/usr/src/app/napcat/config
      - ./napcat/QQ:/root/.config/QQ
    restart: always
    networks:
      - astrbot-net

networks:
  astrbot-net:
    driver: bridge
</code></pre>
<p>这里面有几个点需要注意一下：</p>
<ul>
<li><code>WS_ENABLE=true</code> 表示开启 NapCat 的 WebSocket 客户端模式</li>
<li><code>WS_URL=ws://astrbot:6199/ws</code> 是关键，它告诉 NapCat 连接到 AstrBot 的 WebSocket 服务，注意末尾一定要带 <code>/ws</code>，不然会连不上</li>
<li>两个容器通过 <code>astrbot-net</code> 这个自定义网络互通，这样就不用去记 IP 地址了</li>
</ul>
<p>如果你拉取 Docker 镜像特别慢的话，可以在镜像名前加个国内加速源，比如 <code>m.daocloud.io/docker.io/soulter/astrbot:latest</code>。</p>
<h3>3. 启动容器</h3>
<p>在 <code>docker-compose.yml</code> 所在目录执行：</p>
<pre><code>docker compose up -d
</code></pre>
<p>等待一分钟左右，然后用 <code>docker compose ps</code> 查看状态，两个容器都是 <code>Up</code> 状态就说明启动成功了。</p>
<h2>配置 NapCat（登录 QQ）</h2>
<h3>1. 获取 WebUI Token</h3>
<p>执行下面的命令查看 NapCat 的启动日志：</p>
<pre><code>docker logs napcat
</code></pre>
<p>在日志中找一段类似 <code>NapCat WebUI Login Token: xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</code> 的内容，把这个 Token 记下来。</p>
<h3>2. 登录 WebUI</h3>
<p>在浏览器中访问 <code>http://你的服务器IP:6099</code>，输入刚才获取的 Token 登录。</p>
<p>然后按照 NapCat WebUI 的提示，用手机 QQ 扫描二维码登录你的机器人 QQ 号。</p>
<h2>配置 AstrBot</h2>
<h3>1. 访问管理后台</h3>
<p>浏览器访问 <code>http://你的服务器IP:6185</code>，默认的账号密码都是 <code>astrbot</code>。第一次登录会强制修改密码，修改完成后重新登录即可。</p>
<h3>2. 接入 AI 大模型</h3>
<p>在左侧菜单找到「模型提供商」→「对话」，点击「新增提供商」：</p>
<ul>
<li><strong>提供商</strong>：选择 <code>DeepSeek/OpenAI API 兼容</code></li>
<li><strong>API 地址</strong>：<code>https://api.deepseek.com/v1</code></li>
<li><strong>API Key</strong>：粘贴你从 DeepSeek 拿到的 Key</li>
<li><strong>模型</strong>：填 <code>deepseek-chat</code></li>
</ul>
<h3>3. 创建机器人实例</h3>
<p>在左侧菜单找到「机器人」→「创建机器人」：</p>
<ul>
<li><strong>平台类型</strong>：选择 <code>QQ 个人号（OneBot v11）</code></li>
<li><strong>WebSocket 地址</strong>：<code>0.0.0.0:6199</code></li>
<li><strong>反向 WebSocket Token</strong>：留空即可</li>
<li><strong>启用</strong>：打开</li>
</ul>
<p>保存后重启 AstrBot，然后观察日志，如果出现 <code>[Info] 已连接到 OneBot v11 客户端</code> 这样的信息，就说明 AstrBot 和 NapCat 已经成功建立连接。</p>
<h2>验收成果</h2>
<p>完成上述步骤之后，用另一个 QQ 号给你的机器人发送一条消息测试。正常情况下机器人会调用 DeepSeek 的 API 来生成回复。</p>
<p>你也可以在 AstrBot 的管理后台配置人设提示词（System Prompt），自定义机器人的回复风格。</p>
<h2>常见问题</h2>
<h3>1. 拉取 Docker 镜像太慢怎么办？</h3>
<p>用国内镜像加速，在镜像名前加上 <code>m.daocloud.io/docker.io/</code>，比如：</p>
<pre><code>image: m.daocloud.io/docker.io/soulter/astrbot:latest
</code></pre>
<h3>2. WebSocket 连接失败？</h3>
<p>检查这几个地方：</p>
<ul>
<li><code>WS_URL</code> 末尾有没有带 <code>/ws</code></li>
<li>两个容器是否在同一个 Docker 网络下</li>
<li>端口 <code>6199</code> 有没有在你的云服务器安全组里放行</li>
</ul>
<h3>3. QQ 号被风控了？</h3>
<p>腾讯的风控机制无法控制。建议使用日常活跃的老号登录，不要频繁重启容器导致账号反复登录，也不要发送敏感内容。</p>
<h3>4. 如何更新？</h3>
<p>在项目目录下执行：</p>
<pre><code>docker compose pull
docker compose down
docker compose up -d
</code></pre>
<h3>5. 如何备份？</h3>
<p>直接打包 <code>./data</code>、<code>./napcat</code> 和 <code>./astra_db</code> 这三个目录就行，下次恢复的时候直接把备份文件解压回去再启动容器即可。</p>
<h2>总结</h2>
<p>AstrBot + NapCat + Docker 这个组合从零到跑起来基本十分钟就能搞定。AstrBot 的功能远不止这些，还有插件系统、MCP 服务扩展、多平台接入等，感兴趣的话可以自行探索。</p>
]]></content>
    <author><name>蓝影Shadow</name></author>
    <category term="技术"/>
  </entry>
  <entry>
    <title>利用 UnityExplorer 获取某八个按键的音乐游戏国服的三个加密数值</title>
    <link href="https://blog.yufurry.cn/posts/00000017/" rel="alternate" type="text/html"/>
    <id>https://blog.yufurry.cn/posts/00000017/</id>
    <published>2026-07-06T00:00:00.000Z</published>
    <updated>2026-07-28T00:00:00.000Z</updated>
    <summary>本方案需要你能够启动游戏，并且已经打好了MelonLoader</summary>
    <content type="html"><![CDATA[<p>:::warning 重要提示
本文章不会附带任何软件程序，仅供参考与学习。请勿用于违法用途！
因特殊性可能会带来侵权/DMCA，如果你认为我侵犯了这些软件的版权，请您联系我删除!
:::</p>
<h2>正文</h2>
<h3>1.下载并安装 UnityExplorer</h3>
<p><a href="https://github.com/sinai-dev/UnityExplorer/releases">https://github.com/sinai-dev/UnityExplorer/releases</a></p>
<p>我们需要下载 <strong>UnityExplorer.MelonLoader.Mono.zip</strong> 这个版本</p>
<p><img src="/posts_img/2026/07/00000017/p-00000017-2.webp" alt="" /></p>
<p>下载到之后会得到一个zip文件，解压之后能看到两个文件夹分别是 <strong>Mods</strong> 和 <strong>UserLibs</strong>，我们将它复制到游戏的目录下</p>
<p><img src="/posts_img/2026/07/00000017/p-00000017-3.webp" alt="" /></p>
<p>复制进去之后就可以启动游戏了</p>
<h3>2.检索AesKey，AesIV，ObfuscateParam</h3>
<p>启动游戏之后，在游戏中按下 <strong>F7</strong> 打开UnityExplorer，点击顶部菜单栏的最左边那个 <strong>Object Explorer</strong></p>
<p>选择 <strong>Object Search</strong> ，然后在 <strong>Searching for</strong> 中选择 <strong>Class</strong></p>
<p><img src="/posts_img/2026/07/00000017/p-00000017-4.webp" alt="" /></p>
<p>随后我们要在 <strong>Class filter</strong> 中输入 <strong>Net.CipherAES</strong> ，然后点击 <strong>Search</strong> 按钮</p>
<p>在搜索结果中点击 <strong>Net.CipherAES</strong> ，然后在弹出的 <strong>Inspector</strong> 窗口中找到 <strong>CipherAES.AesKey</strong> 和 <strong>CipherAES.AesIV</strong> ，这两个就是我们需要的AesKey和AesIV</p>
<p><img src="/posts_img/2026/07/00000017/p-00000017-5.webp" alt="" /></p>
<p>ObfuscateParam 也是同理，只需要将 <strong>Class filter</strong> 改为 <strong>Net.Packet.Packet</strong> 再点击 <strong>Search</strong> 即可</p>
<p>Inspector 窗口中的 Packet.ObfuscateParam 就是我们需要的ObfuscateParam</p>
<p><img src="/posts_img/2026/07/00000017/p-00000017-6.webp" alt="" /></p>
]]></content>
    <author><name>蓝影Shadow</name></author>
    <category term="技术"/>
  </entry>
  <entry>
    <title>如何给&quot;舞萌DX&quot;机台清灰</title>
    <link href="https://blog.yufurry.cn/posts/00000016/" rel="alternate" type="text/html"/>
    <id>https://blog.yufurry.cn/posts/00000016/</id>
    <published>2026-07-02T00:00:00.000Z</published>
    <updated>2026-08-15T00:00:00.000Z</updated>
    <summary>前段时间给机厅的一台舞萌清灰了，虽然过去了比较久但是还是想借机水一篇文章~</summary>
    <content type="html"><![CDATA[<h2>前言</h2>
<p>想要给机台清灰首先最重要的就是得到机厅的许可，不要擅自拆机！我们也不鼓励非专业人士自行操作！</p>
<p>有条件的话最好两个人以上因为东西都挺重的，拆机过程比较危险两个人会方便很多</p>
<p>这篇文章主要讲怎么拆卸触摸组件便于清洁屏幕，按键部分本文章不会讲解</p>
<p>如果需要视频教程我们推荐这个视频↓</p>
<p>::bilibili{bvid="BV1aP411X7XX" title="舞萌DX 机台清灰参考视频" p=1}</p>
<p>本文章的部分图片由于部分没有拍到，所以也会参考这个视频</p>
<h2>准备步骤</h2>
<ol>
<li>前面板服务舱和后面板检修口的钥匙，找机修或者店员要</li>
<li>一把十字螺丝刀和一把内六角，有电动的更好，最好备一把短一点的避免塞不进去</li>
<li>如果机台靠墙需要挪出来的话可能还需要一把扳手拧松地脚螺丝，活动扳手最好</li>
<li>一个小刷子用来刷灰，机厅一般都有吸尘器也可以使用，比较方便</li>
<li>两块抹布，一块干抹布一块湿抹布</li>
<li>拆之前最好先关机，用钥匙打开中间的服务箱就可以看到开关了，或者是在机台的1p后面的下面就可以看到电源开关了</li>
</ol>
<h2>拆机步骤</h2>
<h3>1. 拆除灯箱外壳</h3>
<p>首先需要拆除前面的灯箱，这个比较简单，总共需要拆掉七颗内六角螺丝（每个P位七颗），如图所示</p>
<p><img src="/posts_img/2026/07/00000016/p-00000016-2.webp" alt="" /></p>
<p><img src="/posts_img/2026/07/00000016/p-00000016-3.webp" alt="" /></p>
<p>拆下来的螺丝最好找一个东西装着避免弄丢了</p>
<p>拆掉之后就可以把整个灯箱取下来了，稍微有一点重最好还是两个人拿，如果要放在地上的话最好垫点东西避免划伤</p>
<p>拆下来之后可以用吸尘器吸一下这里面的灰尘大部分灰尘都在这里了，吸完之后直接用湿抹布擦干净就可以了</p>
<p>上框的透明部分有条件的话可以加一点亚克力清洁剂，没条件的话喷一点普通的清洁剂拿抹布擦一下也可以</p>
<h3>2. 拆除触摸组件</h3>
<p>这一步需要钻到机器后面，所以如果机器靠墙的话需要把机子挪出来，如果挪不出来就需要用扳手拧松地脚螺丝了，因为太重了所以这里我就找机修大哥帮忙了嘻嘻</p>
<p><img src="/posts_img/2026/07/00000016/p-00000016-4.webp" alt="" /></p>
<p>把机器挪出来之后，需要打开背后的上检修口，1P是螺丝（内六角螺丝），2P需要钥匙打开</p>
<p>打开之后我们需要拔掉里面的五根线，拔的时候慢慢的左右晃一晃，手要扣住接口而不是拽着线否则容易将线拔断，如图所示</p>
<p><img src="/posts_img/2026/07/00000016/p-00000016-5.webp" alt="" /></p>
<p>将所有线材拔出来之后就需要拆除六颗螺丝了，这里使用的是十字螺丝所以要替换螺丝刀</p>
<p>（由于没找到完整的图片所以这里用说明书代替qwq）</p>
<p><img src="/posts_img/2026/07/00000016/p-00000016-6.webp" alt="" /></p>
<p>所有螺丝都拆完之后来到前面，将整个触摸组件往上抬然后再往后拉就可以取下来了，由于比较重所以建议两个人来搬</p>
<p>拆下来之后就可以对触摸组件内部进行清洁了，建议直接用干抹布轻轻擦拭干净即可，不要用酒精等具有一定腐蚀性的液体来擦拭，也不建议用湿抹布来擦</p>
<p>同时也可以给显示器擦拭干净，包括整个机台里面都建议擦一擦拿吸尘器吸一下</p>
<p><img src="/posts_img/2026/07/00000016/p-00000016-7.webp" alt="" /></p>
<h3>3. 安装</h3>
<p>安装其实只需要倒放一遍即可，注意以下事项</p>
<ol>
<li>确保触摸组件与框体完全贴合并固定牢固</li>
<li>安装的时候尽量使用手动螺丝刀，使用电动螺丝刀的话尽量把扭矩调小一点否则有概率把框体的木板或者是亚克力拧裂</li>
<li>前灯箱推荐在安装前先开机测试，确保没问题了再安装回去</li>
</ol>
<h3>4. 测试</h3>
<p>进入游戏之后在中间的服务箱按"test"进入测试</p>
<p>一号键是向上四号键是向下五号键是确认，选择到触摸传感器测试按五号键，使用一号键或四号键选择测试1P或2P，按五号键确认</p>
<p>等待自检完成即可测试触摸，如果有官方送的触摸测试锤推荐使用测试锤测试，结果更加精准，没有的话戴上手套也可以测试</p>
<p>当然你也可以直接开一把来测试</p>
<h2>总结</h2>
<p>清灰其实不难，但是清完干干净净的看着就舒服不少，这样你就获得了一台崭新的迪拉熊</p>
<p><img src="/posts_img/2026/07/00000016/p-00000016-8.webp" alt="" /></p>
<p>:::grid{columns="2"}
<img src="/posts_img/2026/07/00000016/p-00000016-9.webp" alt="" /></p>
<p><img src="/posts_img/2026/07/00000016/p-00000016-10.webp" alt="" />
:::</p>
]]></content>
    <author><name>蓝影Shadow</name></author>
    <category term="技术"/>
  </entry>
  <entry>
    <title>用Cloudflare Workers实现一个简单的API代理</title>
    <link href="https://blog.yufurry.cn/posts/00000015/" rel="alternate" type="text/html"/>
    <id>https://blog.yufurry.cn/posts/00000015/</id>
    <published>2026-06-25T00:00:00.000Z</published>
    <updated>2026-06-25T00:00:00.000Z</updated>
    <summary>前两天给网站接入Github授权登录的时候发现有一个问题，就是大陆服务器不能直接访问Github的API，于是就尝试搭建一个代理..</summary>
    <content type="html"><![CDATA[<h2>前言</h2>
<p>前两天给网站接入 GitHub 授权登录的时候发现有一个问题，就是大陆服务器不能直接访问 GitHub 的 API。这个问题相信很多开发者都遇到过，毕竟 GitHub 的 API 在国内访问经常不稳定或者直接超时。</p>
<p>解决方案有几种：购买海外服务器搭建代理、使用 VPN、使用第三方代理服务等。考虑到成本和稳定性，我最终选择了使用 Cloudflare Workers 来搭建一个简单的 API 代理。</p>
<h2>为什么选择 Cloudflare Workers</h2>
<ol>
<li><strong>免费额度充足</strong>：每月有 10 万次免费请求，对于个人项目来说完全够用</li>
<li><strong>全球 CDN 加速</strong>：Cloudflare 在全球有大量节点，可以提供快速的访问体验</li>
<li><strong>部署简单</strong>：只需要写几行代码，通过 Dashboard 就能快速部署</li>
<li><strong>无需服务器</strong>：不需要管理任何服务器，零运维成本</li>
</ol>
<p>至于其他几种方案我为什么不使用呢？主要有以下几个问题</p>
<ol>
<li>购买海外服务器搭建，成本太高，我更希望接近零成本的解决这个问题</li>
<li>使用 VPN 本质上还是属于翻墙行为，这是违法的，搭建代理就可以规避掉这个问题</li>
<li>使用第三方代理服务，稳定性与安全性肯定不如自己搭建的代理</li>
</ol>
<h2>实现</h2>
<p>Cloudflare Workers 的代码非常简单，使用 JavaScript/TypeScript 编写。核心思路就是将请求转发到 GitHub API，然后将响应返回给客户端。</p>
<pre><code>export default {
  async fetch(request, env, ctx) {
    // 处理 OPTIONS 预检请求
    if (request.method === "OPTIONS") {
      return new Response(null, {
        headers: {
          "Access-Control-Allow-Origin": "*",
          "Access-Control-Allow-Methods": "GET,POST,OPTIONS",
          "Access-Control-Allow-Headers": "Content-Type"
        }
      });
    }

    const reqUrl = new URL(request.url);
    let targetUrl;
    
    // /login 路径代理到 github.com，其他路径代理到 api.github.com
    if (reqUrl.pathname.startsWith("/login")) {
      targetUrl = `https://github.com${reqUrl.pathname}${reqUrl.search}`;
    } else {
      targetUrl = `https://api.github.com${reqUrl.pathname}${reqUrl.search}`;
    }

    // 转发请求
    const forwardReq = new Request(targetUrl, {
      method: request.method,
      headers: request.headers,
      body: request.body
    });

    const resp = await fetch(forwardReq);
    const newResp = new Response(resp.body, resp);
    newResp.headers.set("Access-Control-Allow-Origin", "*");
    
    return newResp;
  }
};
</code></pre>
<h2>部署步骤</h2>
<ol>
<li>
<p><strong>注册 Cloudflare 账号</strong>：访问 <a href="https://dash.cloudflare.com/">Cloudflare</a> 注册一个免费账号</p>
</li>
<li>
<p><strong>创建 Worker</strong>：在 Dashboard 页面左侧的导航栏中展开 “计算”，点击 "Workers 和 Pages"，后点击右上角的 “创建应用程序”，开发方式选择从Hello world开始，起一个项目的名字，比如 "github-api-proxy"，随后点击部署</p>
</li>
<li>
<p><strong>粘贴代码</strong>：来到这个项目的页面，点击右上角的编辑代码，将上面的代码粘贴到编辑器中</p>
</li>
<li>
<p><strong>设置路由（可选）</strong>：如果你有自己的域名，可以在 Workers &amp; Pages -&gt; 路由中设置自定义路由，我强烈推荐绑定一个自己的域名</p>
</li>
<li>
<p><strong>部署</strong>：点击 "部署" 即可完成一个代理的搭建</p>
</li>
</ol>
<p>部署完成后，你就有了一个自己的 GitHub API 代理，访问地址类似：<code>https://your-worker.your-subdomain.workers.dev/</code></p>
<h2>使用示例</h2>
<p>之前直接调用 GitHub API 的地方：</p>
<pre><code>https://api.github.com/user
</code></pre>
<p>现在改为：</p>
<pre><code>https://your-worker.your-subdomain.workers.dev/user
</code></pre>
<h2>注意事项</h2>
<ol>
<li>
<p><strong>频率限制</strong>：GitHub API 有速率限制，使用代理后仍然是同一个 IP 去请求，所以要注意控制请求频率</p>
</li>
<li>
<p><strong>HTTPS</strong>：Cloudflare Worker 自动提供 HTTPS，无需额外配置</p>
</li>
<li>
<p><strong>安全性</strong>：我们提供的示例代码只能确保服务能正常运行，实际上部署时应该修改代码使得它具备一定的安全性，比如添加认证机制、限制请求频率等，这些都可以很轻松地通过代码修改实现</p>
</li>
</ol>
<h2>警告</h2>
<p>使用 CF Workers 代理 GitHub 可能会违反使用规则导致你的账号被封禁，所以请做好安全措施，比如限制请求频率、添加认证机制等。大部分的封号行为都是因为请求频率过高或者是接口没有经过鉴权但是地址被泄露了导致被不法分子盗用，我们建议你只在测试环境里使用这套方案，生产环境请谨慎使用并做好安全验证。能自己搭建代理服务器最好就自己搭建，本文章仅供学习参考使用了我们的方案导致你的帐号被封禁或其他问题我们不负责任！！</p>
]]></content>
    <author><name>蓝影Shadow</name></author>
    <category term="技术"/>
  </entry>
  <entry>
    <title>FRP 内网穿透完整指南</title>
    <link href="https://blog.yufurry.cn/posts/00000013/" rel="alternate" type="text/html"/>
    <id>https://blog.yufurry.cn/posts/00000013/</id>
    <published>2026-06-06T00:00:00.000Z</published>
    <updated>2026-07-29T00:00:00.000Z</updated>
    <summary>详细介绍 FRP 内网穿透的原理、作用以及完整的搭建教程，帮助你将内网服务安全暴露到公网。</summary>
    <content type="html"><![CDATA[<h2>前言</h2>
<p>在日常生活中，你是否遇到过这样的困扰：</p>
<ul>
<li>在家搭建了一个 NAS 或家庭影院系统，想在外面访问却无法实现</li>
<li>开发了一个 Web 应用，只能在本地局域网内访问，无法分享给外网的朋友</li>
<li>有一台树莓派或内网服务器，想远程控制却因为没有公网 IP 而束手无策</li>
</ul>
<p>这些问题都可以通过 <strong>FRP（Fast Reverse Proxy）</strong> 来解决。本文将详细介绍 FRP 的原理、作用以及完整的搭建教程。</p>
<h2>一、FRP 是什么？能干什么？</h2>
<h3>1.1 FRP 简介</h3>
<p>FRP（Fast Reverse Proxy）是一个专注于<strong>内网穿透</strong>的高性能反向代理应用，使用 Go 语言开发，支持 TCP、UDP、HTTP、HTTPS 等多种协议。它可以将内网服务以安全、便捷的方式通过具有公网 IP 的节点中转暴露到公网。</p>
<p>FRP 项目地址：<a href="https://github.com/fatedier/frp">https://github.com/fatedier/frp</a></p>
<h3>1.2 FRP 能干什么？</h3>
<p>FRP 的应用场景非常广泛：</p>
<table>
<thead>
<tr>
<th>场景</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>远程访问家庭 NAS</strong></td>
<td>在外网访问家里的 NAS，查看文件、播放媒体</td>
</tr>
<tr>
<td><strong>远程开发调试</strong></td>
<td>将本地开发的服务暴露到公网，方便第三方测试</td>
</tr>
<tr>
<td><strong>建立私人 VPN</strong></td>
<td>通过 FRP + SSH 实现安全的远程访问</td>
</tr>
<tr>
<td><strong>访问局域网设备</strong></td>
<td>如摄像头、打印机、智能家居设备等</td>
</tr>
<tr>
<td><strong>微信/支付宝等回调开发</strong></td>
<td>需要接收外网请求的本地服务</td>
</tr>
<tr>
<td><strong>游戏联机/服务器</strong></td>
<td>进行Minecraft联机就可以使用FRP</td>
</tr>
</tbody>
</table>
<h2>二、为什么需要 FRP？</h2>
<h3>2.1 内网设备的困境</h3>
<p>我们都知道，互联网上的主机要互相通信，首先需要知道对方的公网 IP 地址。然而现实情况是：</p>
<ul>
<li><strong>IPv4 地址枯竭</strong>：全球 IPv4 地址早已不够用，普通用户难以获得公网 IP</li>
<li><strong>NAT 网络地址转换</strong>：大多数用户的网络环境是这样的：</li>
</ul>
<pre><code>用户设备 → 家庭路由器 → 运营商 NAT → 互联网
</code></pre>
<p>家庭路由器分配的是 192.168.x.x、172.16.x.x、10.x.x.x 等内网 IP，而运营商可能进一步使用 CGNAT（运营商级 NAT），将大量用户共享少量公网 IP。</p>
<p>结果是：<strong>外网无法主动连接到你的任何设备</strong>。</p>
<h3>2.2 常见解决方案对比</h3>
<table>
<thead>
<tr>
<th>方案</th>
<th>优点</th>
<th>缺点</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>花生壳等商业工具</strong></td>
<td>开箱即用</td>
<td>免费版限速限流、有广告、需付费</td>
</tr>
<tr>
<td><strong>IPv6</strong></td>
<td>直接寻址</td>
<td>部分运营商限制，老旧设备不支持</td>
</tr>
<tr>
<td><strong>申请公网 IP</strong></td>
<td>真实公网访问</td>
<td>电信部分可行，移动/联通基本无望</td>
</tr>
<tr>
<td><strong>FRP</strong></td>
<td>完全自主可控、支持多种协议</td>
<td>需要一台云服务器</td>
</tr>
</tbody>
</table>
<h3>2.3 FRP 的优势</h3>
<p>相比其他方案，FRP 具有以下优势：</p>
<ul>
<li><strong>完全自主可控</strong>：只需一台廉价云服务器，月付 ¥10-30</li>
<li><strong>多协议支持</strong>：TCP、UDP、HTTP、HTTPS 等</li>
<li><strong>高性能</strong>：采用 TCP 连接流式复用，节省资源</li>
<li><strong>安全</strong>：支持 TLS 加密、身份验证</li>
<li><strong>跨平台</strong>：支持 Linux、Windows、macOS、树莓派等</li>
</ul>
<h2>三、FRP 工作原理详解</h2>
<h3>3.1 核心组件</h3>
<p>FRP 采用 <strong>C/S（客户端/服务端）架构</strong>，由两个核心程序组成：</p>
<table>
<thead>
<tr>
<th>组件</th>
<th>运行位置</th>
<th>功能</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>frps</strong>（Server）</td>
<td>公网服务器（云服务器）</td>
<td>接收外网请求，转发给内网客户端</td>
</tr>
<tr>
<td><strong>frpc</strong>（Client）</td>
<td>内网设备（PC/NAS/树莓派）</td>
<td>主动连接 frps，注册本地服务</td>
</tr>
</tbody>
</table>
<h3>3.2 工作流程</h3>
<p>FRP 的工作原理可以分为以下几个步骤：</p>
<pre><code>┌─────────────────────────────────────────────────────────────┐
│                      公网服务器 (frps)                       │
│  ┌─────────┐                                                 │
│  │  frps   │◄────── 控制连接 (TCP 长连接) ────────► frpc    │
│  │         │                                                 │
│  │  端口   │◄──────── 数据转发 ─────────────────── 内网服务 │
│  │  映射   │                                                 │
│  └─────────┘                                                 │
└─────────────────────────────────────────────────────────────┘
</code></pre>
<ol>
<li>
<p><strong>内网主动出站</strong>：frpc 启动后，主动连接 frps 的监听端口（默认 7000），建立持久 TCP 长连接</p>
</li>
<li>
<p><strong>服务注册</strong>：frpc 告知 frps："我能代理本地 127.0.0.1:8080 的 HTTP 服务"</p>
</li>
<li>
<p><strong>外网请求到达</strong>：用户访问 <code>http://公网IP:端口</code> 或 <code>http://域名</code>，DNS 解析到 frps 服务器</p>
</li>
<li>
<p><strong>智能路由</strong>：frps 根据端口号或 HTTP Host 头，找到对应的 frpc</p>
</li>
<li>
<p><strong>数据透传</strong>：frps 通过已有连接通知 frpc，双方建立数据通道，后续流量双向转发</p>
</li>
</ol>
<h3>3.3 支持的代理类型</h3>
<p>FRP 支持多种代理类型，适应不同的使用场景：</p>
<table>
<thead>
<tr>
<th>代理类型</th>
<th>用途</th>
<th>特点</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>TCP</strong></td>
<td>通用端口映射</td>
<td>适用于 SSH、RDP、游戏服务器等</td>
</tr>
<tr>
<td><strong>UDP</strong></td>
<td>UDP 端口映射</td>
<td>适用于 DNS、视频流等</td>
</tr>
<tr>
<td><strong>HTTP/HTTPS</strong></td>
<td>Web 服务</td>
<td>支持域名虚拟主机、自动 Host 头处理</td>
</tr>
<tr>
<td><strong>STCP/SUDP</strong></td>
<td>安全内网代理</td>
<td>无公网端口暴露，需双方部署 frpc</td>
</tr>
<tr>
<td><strong>XTCP</strong></td>
<td>P2P 直连</td>
<td>打洞成功后可绕过服务器，节省带宽</td>
</tr>
</tbody>
</table>
<h2>四、FRP 搭建实战</h2>
<h3>4.1 准备工作</h3>
<p>在开始之前，你需要准备：</p>
<ul>
<li>一台 <strong>Linux 公网服务器</strong>（推荐 Ubuntu/CentOS，最低 1核1G）</li>
<li>一台 <strong>内网设备</strong>（Windows/Linux/macOS/树莓派）</li>
<li>一个<strong>域名</strong>（可选，但 HTTP/HTTPS 模式必需）</li>
</ul>
<h3>4.2 下载 FRP</h3>
<p>从 GitHub Release 页面下载最新版的二进制文件：</p>
<pre><code># 下载（根据你的系统架构选择版本）
wget https://github.com/fatedier/frp/releases/download/v0.62.0/frp_0.62.0_linux_amd64.tar.gz

# 解压
tar -xzf frp_0.62.0_linux_amd64.tar.gz
cd frp_0.62.0_linux_amd64
</code></pre>
<p>解压后你会看到以下文件：</p>
<pre><code>.
├── frpc          # 客户端程序
├── frpc.toml     # 客户端配置
├── frps          # 服务端程序
├── frps.toml     # 服务端配置
└── LICENSE
</code></pre>
<p>服务端和客户端使用同一份程序，只是配置文件不同。我们将它们分开：</p>
<pre><code># 创建目录分别存放
mkdir -p /opt/frp/server  # 服务端
mkdir -p /opt/frp/client  # 客户端

# 服务端保留 frps 和 frps.toml
mv frps frps.toml /opt/frp/server/

# 客户端保留 frpc 和 frpc.toml
mv frpc frpc.toml /opt/frp/client/
</code></pre>
<h3>4.3 配置服务端 (frps)</h3>
<p>编辑服务端的配置文件 <code>/opt/frp/server/frps.toml</code>：</p>
<pre><code>[common]
# 服务端监听端口，客户端连接到此端口
bindPort = 7000

# HTTP 服务入口端口（如果使用 HTTP 代理）
vhostHttpPort = 8080

# HTTPS 服务入口端口（如果使用 HTTPS 代理）
# vhostHttpsPort = 8443

# 身份验证
auth.method = "token"
auth.token = "your_strong_token_here"  # 建议使用强密码

# Dashboard 配置（Web 管理界面）
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "your_dashboard_password"

# 日志配置
log.to = "/var/log/frp/frps.log"
log.level = "info"
log.maxDays = 7

# 开启 Prometheus 监控指标（可选）
enablePrometheus = true
</code></pre>
<blockquote>
<p><strong>注意</strong>：记得在云服务器的安全组中开放 <code>7000</code>、<code>7500</code>、<code>8080</code> 等端口。</p>
</blockquote>
<p>启动服务端：</p>
<pre><code># 前台运行（测试用）
./frps -c ./frps.toml

# 后台运行
nohup ./frps -c ./frps.toml &amp;
</code></pre>
<p>使用 systemd 管理（推荐）：</p>
<pre><code># /etc/systemd/system/frps.service
[Unit]
Description = frp server
After = network.target

[Service]
Type = simple
ExecStart = /opt/frp/server/frps -c /opt/frp/server/frps.toml
Restart = always
RestartSec = 5

[Install]
WantedBy = multi-user.target
</code></pre>
<pre><code>sudo systemctl daemon-reload
sudo systemctl enable frps
sudo systemctl start frps
sudo systemctl status frps
</code></pre>
<p>访问 <code>http://你的服务器IP:7500</code>，输入 Dashboard 用户名和密码，即可看到管理界面。</p>
<h3>4.4 配置客户端 (frpc)</h3>
<p>编辑客户端的配置文件 <code>/opt/frp/client/frpc.toml</code>：</p>
<pre><code>[common]
# 服务端地址和端口
serverAddr = "你的服务器IP"
serverPort = 7000

# 身份验证，需与服务端一致
auth.method = "token"
auth.token = "your_strong_token_here"

# 日志配置
log.to = "./frpc.log"
log.level = "info"
log.maxDays = 7

# ==== TCP 代理示例 ====
# 将本地 22 端口映射到服务器 6000 端口
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000

# ==== HTTP 代理示例 ====
# 将本地 8080 端口的 Web 服务映射到服务器
[[proxies]]
name = "web"
type = "http"
localIP = "127.0.0.1"
localPort = 8080
customDomains = ["your-domain.com"]
</code></pre>
<p>启动客户端：</p>
<pre><code># 前台运行
./frpc -c ./frpc.toml

# 后台运行
nohup ./frpc -c ./frpc.toml &amp;
</code></pre>
<h3>4.5 进阶配置：使用域名访问</h3>
<p>如果你有域名，可以配置 HTTP/HTTPS 代理，通过域名访问内网服务。</p>
<p><strong>服务端额外配置</strong>：</p>
<pre><code># 在 frps.toml 中确保已设置
vhostHttpPort = 8080
</code></pre>
<p><strong>客户端配置</strong>：</p>
<pre><code>[[proxies]]
name = "web"
type = "http"
localIP = "127.0.0.1"
localPort = 8080
customDomains = ["web.your-domain.com"]
</code></pre>
<p>然后在域名服务商添加 DNS 记录：</p>
<pre><code>web.your-domain.com  →  你的服务器IP
</code></pre>
<p>这样，访问 <code>http://web.your-domain.com:8080</code> 就会自动转发到你的内网服务。</p>
<h3>4.6 进阶配置：负载均衡</h3>
<p>FRP 支持代理组间的负载均衡，非常适合多实例部署的场景：</p>
<pre><code>[[proxy groups]]
name = "web_group"
type = "load-balance"
selector = "round-robin"
servers = [
    { name = "web1", localIP = "192.168.1.100", localPort = 8080 },
    { name = "web2", localIP = "192.168.1.101", localPort = 8080 },
]
</code></pre>
<h2>五、安全加固建议</h2>
<p>FRP 功能强大，但配置不当会带来安全风险。以下是一些加固建议：</p>
<h3>5.1 必做安全措施</h3>
<ol>
<li><strong>使用强 Token</strong>：不要使用简单的密码，使用随机生成的强密码</li>
<li><strong>限制 Dashboard 访问</strong>：使用防火墙规则限制只有特定 IP 可以访问 7500 端口</li>
<li><strong>启用 TLS 加密</strong>：在 <code>[common]</code> 中添加 <code>transport.tls.tlsCertFile</code> 和 <code>transport.tls.tlsKeyFile</code></li>
<li><strong>避免使用 root 运行</strong>：创建专门的 frp 用户</li>
</ol>
<h3>5.2 TLS 加密配置示例</h3>
<pre><code># 服务端 frps.toml
[common]
transport.tls.tlsCertFile = "/path/to/cert.pem"
transport.tls.tlsKeyFile = "/path/to/key.pem"
transport.tls.force = true

# 客户端 frpc.toml
[common]
transport.tls.tlsCertFile = "/path/to/cert.pem"
transport.tls.tlsKeyFile = "/path/to/key.pem"
transport.tls.force = true
</code></pre>
<h2>六、常见问题</h2>
<h3>Q1: 连接失败，提示 "login to server failed"</h3>
<ul>
<li>检查服务端是否正常运行</li>
<li>确认 serverAddr、serverPort、auth.token 与服务端配置一致</li>
<li>检查防火墙和安全组是否放行了端口</li>
</ul>
<h3>Q2: HTTP 服务无法访问</h3>
<ul>
<li>确认服务端 vhostHttpPort 配置正确</li>
<li>检查客户端 customDomains 是否正确解析到服务器 IP</li>
<li>确认域名 DNS 记录生效</li>
</ul>
<h3>Q3: 如何查看连接状态？</h3>
<ul>
<li>访问 Dashboard（默认 http://服务器IP:7500）</li>
<li>查看日志文件</li>
<li>使用 <code>sudo systemctl status frps</code> 查看服务状态</li>
</ul>
<h2>七、总结</h2>
<p>FRP 是一款功能强大且配置灵活的内网穿透工具，通过本文，你应该已经掌握了：</p>
<ul>
<li>FRP 的基本概念和应用场景</li>
<li>FRP 的工作原理</li>
<li>服务端和客户端的完整配置方法</li>
<li>常见的安全加固措施</li>
</ul>
<p>相比商业内网穿透工具，FRP 提供了更高的可控性和灵活性，而且完全开源免费。希望这篇文章能帮助你更好地理解和使用 FRP。</p>
<hr />
<p><strong>参考链接</strong>：</p>
<ul>
<li>FRP 官方 GitHub：<a href="https://github.com/fatedier/frp">https://github.com/fatedier/frp</a></li>
<li>FRP 官方文档：<a href="https://gofrp.org/zh-cn/docs/">https://gofrp.org/zh-cn/docs/</a></li>
</ul>
]]></content>
    <author><name>蓝影Shadow</name></author>
    <category term="技术"/>
  </entry>
  <entry>
    <title>使用宝塔面板在Linux服务器上搭建网站完整教程</title>
    <link href="https://blog.yufurry.cn/posts/00000010/" rel="alternate" type="text/html"/>
    <id>https://blog.yufurry.cn/posts/00000010/</id>
    <published>2026-04-11T00:00:00.000Z</published>
    <updated>2026-04-11T00:00:00.000Z</updated>
    <summary>详细讲解如何在Linux服务器上安装宝塔面板并搭建网站</summary>
    <content type="html"><![CDATA[<h1>前言</h1>
<p>:::warning 重要提示
本文内容可能因宝塔面板版本更新而与实际情况存在差异，仅供参考学习。实际操作时请以<a href="https://www.bt.cn">宝塔面板官方网站</a>提供的最新教程和文档为准。
:::</p>
<p>对于想要建立自己网站的开发者或站长来说，传统的命令行操作可能显得复杂且容易出错。宝塔面板作为一款优秀的服务器管理工具，大大简化了网站部署的流程。本文将详细介绍如何在Linux服务器上安装宝塔面板，并使用它来搭建一个完整的网站。</p>
<h1>准备工作</h1>
<h2>服务器要求</h2>
<p>在开始之前，你需要准备以下环境：</p>
<ul>
<li>一台Linux服务器（推荐CentOS 7.x、Ubuntu 18.04+、Debian 9+）</li>
<li>服务器的root权限或sudo权限</li>
<li>稳定的网络连接</li>
<li>建议配置：1核CPU、1GB内存、20GB硬盘空间以上</li>
</ul>
<h2>域名准备（可选）</h2>
<p>虽然可以使用IP地址访问网站，但为了更好的用户体验，建议提前准备好域名。你可以从阿里云、腾讯云等服务商购买域名。</p>
<h1>安装宝塔面板</h1>
<h2>连接服务器</h2>
<p>首先通过SSH连接到你的Linux服务器：</p>
<pre><code>ssh root@your_server_ip
</code></pre>
<p>输入密码后登录到服务器。</p>
<h2>执行安装命令</h2>
<p>:::tip 提示
以下安装命令中的安全入口参数（如ed8484bec）为示例，实际安装时系统会自动生成随机的安全入口。请始终以官方最新安装命令为准。
:::</p>
<p>根据你的操作系统选择对应的安装命令：</p>
<h3>CentOS/AlmaLinux/Rocky Linux系统</h3>
<pre><code>yum install -y wget &amp;&amp; wget -O install.sh https://download.bt.cn/install/install_6.0.sh &amp;&amp; sh install.sh
</code></pre>
<h3>Ubuntu/Debian系统</h3>
<pre><code>wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh &amp;&amp; sudo bash install.sh
</code></pre>
<h3>其他Linux系统</h3>
<pre><code>wget -O install.sh https://download.bt.cn/install/install_6.0.sh &amp;&amp; bash install.sh
</code></pre>
<p>:::info 获取最新安装命令
请访问 <a href="https://www.bt.cn">宝塔面板官网</a> 首页获取针对您操作系统的最新安装命令。
:::</p>
<h2>安装过程</h2>
<p>执行安装命令后，系统会提示你确认安装，输入<code>y</code>并回车继续。安装过程通常需要5-15分钟，具体时间取决于服务器性能和网络状况。</p>
<p>安装完成后，终端会显示类似以下的信息：</p>
<pre><code>==================================================================
Congratulations! Installed successfully!
==================================================================
外网面板地址: http://your_server_ip:随机端口/随机安全入口
内网面板地址: http://your_local_ip:随机端口/随机安全入口
username: 随机用户名
password: 随机密码
Warning:
If you cannot access the panel, 
release the following port (面板端口|80|443|20|21) in the security group
==================================================================
</code></pre>
<p>:::warning 注意
新版本的宝塔面板默认使用随机端口和随机安全入口，而非固定的8888端口。请仔细记录安装完成后显示的完整访问地址、用户名和密码。
:::</p>
<p>请妥善保存这些信息，特别是访问地址、用户名和密码。</p>
<h1>登录宝塔面板</h1>
<h2>开放端口</h2>
<p>在首次登录前，需要确保服务器的安全组已开放必要的端口：</p>
<ul>
<li>宝塔面板端口：安装完成后显示的随机端口（非固定8888）</li>
<li>80：HTTP端口</li>
<li>443：HTTPS端口</li>
<li>20/21：FTP端口（如需要使用FTP）</li>
<li>3306：MySQL端口（仅在需要远程访问数据库时开放）</li>
</ul>
<p>:::tip 端口说明
新版本的宝塔面板使用随机端口以提高安全性，具体端口号请在安装完成后的输出信息中查看。如果你使用的是云服务器（如阿里云、腾讯云），需要在云控制台的安全组设置中开放这些端口。
:::</p>
<h2>访问面板</h2>
<p>在浏览器中输入安装完成后显示的外网面板地址，例如：</p>
<pre><code>http://your_server_ip:随机端口/随机安全入口
</code></pre>
<p>输入之前记录的用户名和密码登录。</p>
<p>:::warning 重要
如果无法访问面板，请检查：</p>
<ol>
<li>服务器防火墙是否放行了面板端口</li>
<li>云服务器安全组是否放行了面板端口</li>
<li>访问地址是否正确（包含端口号和安全入口）
:::</li>
</ol>
<h2>首次配置</h2>
<p>首次登录后，宝塔面板会推荐安装一些常用的软件套件。对于搭建网站，建议选择LNMP环境：</p>
<ul>
<li>Nginx：Web服务器</li>
<li>MySQL：数据库</li>
<li>PHP：脚本语言</li>
<li>phpMyAdmin：数据库管理工具</li>
</ul>
<p>根据实际需求选择合适的版本，然后点击"一键安装"。安装过程可能需要较长时间，请耐心等待。</p>
<h1>创建网站</h1>
<h2>添加站点</h2>
<ol>
<li>
<p>在左侧菜单点击"网站"</p>
</li>
<li>
<p>点击"添加站点"按钮</p>
</li>
<li>
<p>填写相关信息：</p>
<ul>
<li>域名：输入你的域名（如果没有域名可以暂时使用IP地址）</li>
<li>根目录：网站文件的存放路径，默认即可</li>
<li>数据库：选择是否创建数据库及类型</li>
<li>PHP版本：选择适合的PHP版本</li>
<li>备注：可选，用于标识网站用途</li>
</ul>
</li>
<li>
<p>点击"提交"完成站点创建</p>
</li>
</ol>
<h2>上传网站文件</h2>
<h3>方法一：通过文件管理器上传</h3>
<ol>
<li>在左侧菜单点击"文件"</li>
<li>进入网站根目录（通常是<code>/www/wwwroot/your_domain</code>）</li>
<li>点击"上传"按钮，选择本地网站文件</li>
<li>等待上传完成</li>
</ol>
<h3>方法二：通过FTP上传</h3>
<ol>
<li>在左侧菜单点击"FTP"</li>
<li>查看FTP账号信息</li>
<li>使用FTP客户端（如FileZilla）连接服务器</li>
<li>上传网站文件到对应目录</li>
</ol>
<h3>方法三：通过Git克隆</h3>
<p>如果你的项目托管在GitHub或其他Git平台上：</p>
<ol>
<li>在网站根目录下打开终端</li>
<li>执行git clone命令：</li>
</ol>
<pre><code>cd /www/wwwroot/your_domain
git clone https://github.com/username/repo.git .
</code></pre>
<h2>配置网站</h2>
<h3>基本配置</h3>
<ol>
<li>在网站列表中点击"设置"</li>
<li>可以修改以下内容：
<ul>
<li>域名管理：添加或删除域名</li>
<li>目录绑定：更改网站根目录</li>
<li>流量限制：设置带宽限制</li>
<li>伪静态：配置URL重写规则</li>
</ul>
</li>
</ol>
<h3>SSL证书配置</h3>
<p>为了让网站支持HTTPS访问：</p>
<ol>
<li>在网站设置中点击"SSL"</li>
<li>选择"Let's Encrypt"免费证书</li>
<li>勾选需要申请证书的域名</li>
<li>点击"申请"按钮</li>
<li>申请成功后开启"强制HTTPS"</li>
</ol>
<h1>域名解析</h1>
<h2>获取服务器IP地址</h2>
<p>在宝塔面板首页或服务器信息中可以找到你的公网IP地址。</p>
<h2>配置DNS解析</h2>
<ol>
<li>
<p>登录你的域名注册商控制面板（如阿里云、腾讯云）</p>
</li>
<li>
<p>找到DNS解析设置</p>
</li>
<li>
<p>添加一条A记录：</p>
<ul>
<li>主机记录：@（表示主域名）或www</li>
<li>记录值：你的服务器IP地址</li>
<li>TTL：默认即可</li>
</ul>
</li>
<li>
<p>等待DNS解析生效（通常几分钟到几小时不等）</p>
</li>
</ol>
<h2>验证解析</h2>
<p>使用ping命令检查域名是否正确解析：</p>
<pre><code>ping your_domain.com
</code></pre>
<p>如果返回的是你的服务器IP地址，说明解析成功。</p>
<h1>安全性优化</h1>
<h2>修改面板端口</h2>
<p>为了提高安全性，建议定期修改宝塔面板的访问端口：</p>
<ol>
<li>登录面板后，点击左侧菜单的"面板设置"</li>
<li>找到"面板端口"选项</li>
<li>修改为一个不常用的高位端口（如10000-65535之间）</li>
<li>保存设置并重启面板服务</li>
</ol>
<p>:::warning 注意事项
修改端口后，请务必：</p>
<ol>
<li>在云服务器安全组中开放新端口</li>
<li>关闭旧端口的安全组规则</li>
<li>使用新的端口地址访问面板
:::</li>
</ol>
<h2>设置强密码</h2>
<p>确保使用复杂度高的密码，包含大小写字母、数字和特殊字符。</p>
<h2>启用防火墙</h2>
<ol>
<li>在左侧菜单点击"安全"</li>
<li>启用系统防火墙</li>
<li>只开放必要的端口</li>
<li>可以设置IP白名单限制访问</li>
</ol>
<h2>定期更新</h2>
<p>保持宝塔面板和所有软件的更新：</p>
<ol>
<li>在首页点击"更新"检查最新版本</li>
<li>及时安装安全补丁</li>
<li>更新Web服务器、数据库等组件</li>
</ol>
<h2>备份策略</h2>
<ol>
<li>在左侧菜单点击"计划任务"</li>
<li>添加定期备份任务：
<ul>
<li>备份网站文件</li>
<li>备份数据库</li>
<li>设置保留期限</li>
</ul>
</li>
<li>可以选择备份到本地或远程存储</li>
</ol>
<h1>性能优化</h1>
<h2>Nginx优化</h2>
<ol>
<li>在软件商店中找到Nginx</li>
<li>点击"设置"进行优化：
<ul>
<li>开启gzip压缩</li>
<li>调整worker_processes数量</li>
<li>配置缓存策略</li>
</ul>
</li>
</ol>
<h2>PHP优化</h2>
<ol>
<li>在PHP设置中调整参数：
<ul>
<li>memory_limit：适当增加内存限制</li>
<li>max_execution_time：设置合理的执行时间</li>
<li>opcache：启用OPcache加速</li>
</ul>
</li>
</ol>
<h2>数据库优化</h2>
<ol>
<li>在MySQL设置中：
<ul>
<li>调整innodb_buffer_pool_size</li>
<li>开启查询缓存</li>
<li>定期优化表结构</li>
</ul>
</li>
</ol>
<h2>启用CDN（可选）</h2>
<p>对于访问量较大的网站，可以考虑使用CDN：</p>
<ol>
<li>注册CDN服务提供商（如阿里云CDN、腾讯云CDN）</li>
<li>将域名CNAME指向CDN提供的地址</li>
<li>在CDN控制台配置源站信息</li>
<li>设置缓存策略和HTTPS证书</li>
</ol>
<p>CDN可以有效减轻服务器压力，提高用户访问速度，特别是对于静态资源的分发。</p>
<h1>监控与维护</h1>
<h2>监控服务器状态</h2>
<p>宝塔面板提供了丰富的监控功能：</p>
<ul>
<li>CPU使用率</li>
<li>内存使用情况</li>
<li>磁盘空间</li>
<li>网络流量</li>
<li>负载情况</li>
</ul>
<p>定期检查这些指标，及时发现潜在问题。</p>
<h2>日志管理</h2>
<ol>
<li>在网站设置中查看访问日志和错误日志</li>
<li>分析日志找出潜在问题</li>
<li>定期清理旧日志释放空间</li>
</ol>
<h2>常见问题处理</h2>
<h3>网站无法访问</h3>
<ol>
<li>检查服务器是否正常运行</li>
<li>确认安全组端口已开放</li>
<li>检查域名解析是否正确</li>
<li>查看Nginx/Apache错误日志</li>
</ol>
<h3>数据库连接失败</h3>
<ol>
<li>确认数据库服务是否启动</li>
<li>检查数据库用户名和密码</li>
<li>验证数据库权限设置</li>
<li>查看数据库错误日志</li>
</ol>
<h3>页面加载缓慢</h3>
<ol>
<li>检查服务器资源使用情况</li>
<li>优化网站代码和资源</li>
<li>启用缓存机制</li>
<li>考虑升级服务器配置</li>
</ol>
<h1>进阶功能</h1>
<h2>定时任务</h2>
<p>利用宝塔的计划任务功能：</p>
<ul>
<li>定期清理临时文件</li>
<li>自动备份重要数据</li>
<li>定时重启服务</li>
<li>执行自定义脚本</li>
</ul>
<h2>多站点管理</h2>
<p>宝塔面板支持在同一服务器上管理多个网站：</p>
<ol>
<li>每个网站独立配置</li>
<li>不同的域名指向不同目录</li>
<li>可以为每个站点设置不同的PHP版本</li>
<li>独立的数据库和FTP账号</li>
</ol>
<h2>Docker支持</h2>
<p>宝塔面板也支持Docker容器管理：</p>
<ol>
<li>在软件商店安装Docker</li>
<li>可以轻松部署各种容器化应用</li>
<li>管理镜像和容器</li>
<li>配置容器网络和存储</li>
</ol>
<h1>总结</h1>
<p>通过本文的介绍，你应该已经掌握了使用宝塔面板在Linux服务器上搭建网站的完整流程。从安装面板、创建网站、配置域名到安全性和性能优化，宝塔面板都提供了简单易用的图形界面，大大降低了网站部署的门槛。</p>
<p>记住几个关键点：</p>
<ol>
<li>安装前确保服务器满足基本要求</li>
<li>首次安装后及时修改默认设置提高安全性</li>
<li>合理配置网站参数以获得最佳性能</li>
<li>建立定期备份和维护的习惯</li>
<li>根据实际需求选择合适的优化方案</li>
</ol>
<p>随着你对宝塔面板的熟悉，还可以探索更多高级功能，如负载均衡、集群部署等。希望这篇教程能帮助你顺利搭建自己的网站！</p>
<h1>延伸阅读</h1>
<ul>
<li><a href="https://www.bt.cn">宝塔面板官方网站</a></li>
<li><a href="https://www.bt.cn/bbs/">宝塔面板官方论坛</a></li>
<li><a href="https://nginx.org/en/docs/">Nginx性能优化指南</a></li>
<li><a href="https://dev.mysql.com/doc/">MySQL优化最佳实践</a></li>
<li><a href="https://www.cyberciti.biz/tips/linux-security.html">Linux服务器安全加固</a></li>
</ul>
]]></content>
    <author><name>蓝影Shadow</name></author>
    <category term="技术"/>
  </entry>
  <entry>
    <title>笔记本电脑到手验机全攻略：从开箱到烤机的完整流程</title>
    <link href="https://blog.yufurry.cn/posts/00000011/" rel="alternate" type="text/html"/>
    <id>https://blog.yufurry.cn/posts/00000011/</id>
    <published>2026-04-11T00:00:00.000Z</published>
    <updated>2026-04-11T00:00:00.000Z</updated>
    <summary>详细讲解新笔记本电脑到手后的完整验机流程，包括开箱录像、外观检查、激活状态检测、跳过网络激活以及烤机测试等关键步骤。</summary>
    <content type="html"><![CDATA[<h2>前言</h2>
<p>购买新笔记本电脑后，正确的验机流程至关重要。这不仅能确保您收到的是全新正品，还能在发现问题时及时维权。本文将从开箱开始，详细介绍每一个验机环节，帮助您全面检查新机状态。</p>
<h2>第一步：开箱全程录像</h2>
<h3>准备工作</h3>
<p>在拆封之前，请准备好以下设备：</p>
<ul>
<li>手机或相机（确保存储空间充足）</li>
<li>稳定的拍摄环境，光线充足</li>
<li>三脚架或固定支架（可选，但推荐）</li>
</ul>
<h3>录像要点</h3>
<ol>
<li>
<p><strong>展示快递外包装</strong></p>
<ul>
<li>拍摄快递单号，确保清晰可见</li>
<li>记录外包装的完整性，是否有破损、挤压痕迹</li>
<li>拍摄包装的各个角度</li>
</ul>
</li>
<li>
<p><strong>拆封过程</strong></p>
<ul>
<li>从打开外包装开始全程不间断录制</li>
<li>拍摄产品包装盒的密封条、封贴是否完好</li>
<li>记录序列号标签位置，便于后续核对</li>
</ul>
</li>
<li>
<p><strong>开箱细节</strong></p>
<ul>
<li>逐一取出所有配件并展示</li>
<li>拍摄主机、电源适配器、说明书、保修卡等物品</li>
<li>确认配件清单与官方说明一致</li>
<li><strong>重点检查屏幕保护膜和键盘隔离纸</strong>：新机通常在屏幕和键盘之间会有一张纸质隔离垫，用于防止运输过程中键盘在屏幕上留下压痕。这张纸应该平整完好，如有缺失或破损需警惕</li>
</ul>
</li>
</ol>
<p><strong>重要提示</strong>：整个录像过程不要中断，如发现任何问题，这段视频将成为重要的维权证据。</p>
<h2>第二步：外观检查</h2>
<h3>机身外部检查</h3>
<ol>
<li>
<p><strong>外壳检查</strong></p>
<ul>
<li>仔细观察A面（顶盖）、C面（键盘面）、D面（底盖）是否有划痕、磕碰</li>
<li>检查边角是否有磨损或变形</li>
<li>查看表面涂层是否均匀，有无气泡或脱落</li>
</ul>
</li>
<li>
<p><strong>屏幕检查</strong></p>
<ul>
<li>检查屏幕表面是否有划痕、指纹、灰尘</li>
<li>观察屏幕边框是否均匀，有无开胶现象</li>
<li>检查转轴开合是否顺畅，有无异响</li>
<li><strong>检查屏幕保护膜</strong>：新机屏幕通常贴有保护膜，膜上可能有品牌标识或警示语，确认膜是否完整无气泡</li>
<li><strong>检查键盘印痕</strong>：仔细观察屏幕表面是否有键盘按键留下的压痕或印记，这是判断是否为二手机的重要依据</li>
</ul>
</li>
<li>
<p><strong>接口检查</strong></p>
<ul>
<li>查看所有USB、HDMI、Type-C等接口是否有使用痕迹</li>
<li>检查接口内部是否清洁，有无氧化或异物</li>
<li>确认接口排列整齐，无松动现象</li>
</ul>
</li>
<li>
<p><strong>底部检查</strong></p>
<ul>
<li>查看底部螺丝是否有拧动痕迹（掉漆、划伤）</li>
<li>检查防滑脚垫是否完好，有无缺失</li>
<li>核对底部标签的型号、序列号与包装盒是否一致</li>
</ul>
</li>
</ol>
<h3>键盘和触控板检查</h3>
<ol>
<li>
<p><strong>键盘</strong></p>
<ul>
<li>检查键帽是否平整，有无歪斜或缺失</li>
<li>按压每个按键，感受回弹是否正常，有无卡键或失灵</li>
<li>检查背光（如有）是否均匀，有无死灯或亮度不一致</li>
<li><strong>重点检查常用键位</strong>：WASD、空格、回车等键是否有明显磨损或油光</li>
<li><strong>检查键盘清洁度</strong>：键帽缝隙中不应有灰尘、头发等异物</li>
</ul>
</li>
<li>
<p><strong>触控板</strong></p>
<ul>
<li>触摸表面是否光滑，有无划痕或凹陷</li>
<li>测试多点触控是否灵敏，双指滚动、缩放等功能是否正常</li>
<li>检查点击反馈是否清脆，左右键功能是否正常</li>
<li>测试触控板边缘手势操作（如三指滑动切换任务等）</li>
</ul>
</li>
</ol>
<h2>第三步：首次开机前的关键检查</h2>
<h3>电源适配器检查（极其重要）</h3>
<p><strong>这是判断笔记本是否被激活过的最关键方法之一：</strong></p>
<ol>
<li>
<p><strong>不插电源尝试开机</strong></p>
<ul>
<li>新笔记本电脑在出厂时电池处于保护模式，电量极低或完全无电</li>
<li><strong>在未连接电源适配器的情况下，新机是无法开机的</strong></li>
<li>如果您发现不插电源就能直接开机，说明这台电脑之前已经被激活使用过</li>
<li>这种情况极有可能是样机、退货机或二手机，应立即联系商家</li>
</ul>
</li>
<li>
<p><strong>连接电源适配器</strong></p>
<ul>
<li>先连接电源适配器，再按开机键</li>
<li>观察充电指示灯是否亮起</li>
<li>部分机型首次充电需要较长时间才能开机，请耐心等待</li>
</ul>
</li>
<li>
<p><strong>电源适配器检查</strong></p>
<ul>
<li>检查适配器外观是否有磨损、划痕</li>
<li>查看电源线是否有折痕或使用痕迹</li>
<li>确认适配器型号、功率与官方规格一致</li>
<li>检查插头是否有插拔痕迹（金属触点应光亮无氧化）</li>
</ul>
</li>
</ol>
<h3>开机前准备</h3>
<p><strong>切勿连接网络！</strong> 这是最关键的一步。Windows系统在联网后会自动激活，一旦激活将影响退换货权益。</p>
<p><strong>首次开机预期表现：</strong></p>
<ul>
<li>连接电源后按下开机键</li>
<li>屏幕亮起，出现品牌Logo</li>
<li>进入Windows初始设置界面（OOBE）</li>
<li>如直接进入桌面或已创建用户账户，说明已被使用过</li>
</ul>
<h3>跳过网络激活的方法</h3>
<h4>Windows 11 系统</h4>
<ol>
<li>
<p><strong>方法一：使用命令跳过</strong></p>
<ul>
<li>进入网络连接界面时，按下 <code>Shift + F10</code>（部分机型需按 <code>Shift + Fn + F10</code>）</li>
<li>在弹出的命令提示符中输入：<code>OOBE\BYPASSNRO</code></li>
<li>系统会自动重启，再次进入设置界面</li>
<li>此时会出现"我没有Internet连接"选项，选择它</li>
<li>点击"继续执行有限设置"完成离线 setup</li>
</ul>
</li>
<li>
<p><strong>方法二：任务管理器结束进程</strong></p>
<ul>
<li>在网络连接界面按 <code>Shift + F10</code> 打开命令提示符</li>
<li>输入 <code>taskmgr</code> 打开任务管理器</li>
<li>找到"网络连接流"或"Network Connection Flow"进程</li>
<li>右键结束该进程，即可跳过网络设置</li>
</ul>
</li>
</ol>
<h4>Windows 10 系统</h4>
<p>Windows 10 通常可以直接选择"我没有Internet连接"，如没有该选项，可参考上述Windows 11的方法一。</p>
<h3>进入系统后的初步检查</h3>
<ol>
<li>
<p><strong>系统信息核对</strong></p>
<ul>
<li>右键"此电脑" → "属性"，查看处理器、内存、系统类型</li>
<li>按 <code>Win + R</code>，输入 <code>msinfo32</code>，查看详细系统信息</li>
<li>核对CPU型号、内存容量是否与购买配置一致</li>
</ul>
</li>
<li>
<p><strong>硬盘检查</strong></p>
<ul>
<li>右键"开始菜单" → "磁盘管理"</li>
<li>查看硬盘分区情况，确认总容量是否符合标称值</li>
<li>注意：厂商标称容量与实际可用容量会有差异（换算方式不同），属正常现象</li>
</ul>
</li>
<li>
<p><strong>电池信息</strong></p>
<ul>
<li>按 <code>Win + X</code>，选择"Windows PowerShell(管理员)"或"终端(管理员)"</li>
<li>输入命令：<code>powercfg /batteryreport</code></li>
<li>系统会生成电池报告，路径通常为 <code>C:\Users\[用户名]\battery-report.html</code></li>
<li>打开报告，查看以下关键信息：
<ul>
<li>"Design Capacity"（设计容量）：电池的标称容量</li>
<li>"Full Charge Capacity"（完全充电容量）：当前实际可充入的容量</li>
<li>"Cycle Count"（循环次数）：电池充放电循环次数</li>
</ul>
</li>
<li><strong>新机标准</strong>：
<ul>
<li>设计容量与完全充电容量应该非常接近（差异在5%以内）</li>
<li>循环次数应为0或个位数（1-5次属于出厂测试正常范围）</li>
<li>如循环次数超过10次，或容量差异过大，可能为样机或退货机</li>
</ul>
</li>
</ul>
</li>
<li>
<p><strong>BIOS/UEFI检查</strong></p>
<ul>
<li>重启电脑，按指定键进入BIOS（常见键：F2、F10、Del、Esc，具体因品牌而异）</li>
<li>查看BIOS中的系统信息：
<ul>
<li>序列号（Serial Number）：应与机身标签、包装盒一致</li>
<li>BIOS版本：确认是否为最新版本</li>
<li>硬件配置：CPU、内存、硬盘等信息是否与购买配置一致</li>
</ul>
</li>
<li>检查系统时间：新机BIOS时间可能不准确，属正常现象</li>
<li><strong>注意</strong>：不要随意修改BIOS设置，查看完毕后直接退出</li>
</ul>
</li>
</ol>
<h2>第四步：硬件检测</h2>
<h3>屏幕检测</h3>
<ol>
<li>
<p><strong>坏点检测</strong></p>
<ul>
<li>访问在线屏幕测试网站（如 testufo.com、eizo.cn/monitor-test 或 screen.burnin.test）</li>
<li>依次显示纯白、纯黑、红、绿、蓝、灰等纯色画面</li>
<li>仔细观察是否有亮点、暗点、色点</li>
<li><strong>检测方法</strong>：
<ul>
<li>纯白画面：检查暗点和色点</li>
<li>纯黑画面：检查亮点和漏光</li>
<li>彩色画面：检查颜色异常点</li>
</ul>
</li>
<li><strong>国家标准</strong>：A级屏允许3个以内坏点，但建议要求完美屏</li>
<li><strong>注意</strong>：不同品牌对坏点的政策不同，购买前应了解清楚</li>
</ul>
</li>
<li>
<p><strong>漏光检查</strong></p>
<ul>
<li>在黑暗环境中显示纯黑画面</li>
<li>从不同角度观察屏幕边缘是否有明显漏光</li>
<li>IPS屏幕存在轻微漏光属正常现象，但不应过于严重</li>
</ul>
</li>
<li>
<p><strong>色彩和亮度</strong></p>
<ul>
<li>检查色彩过渡是否自然，有无断层或色带</li>
<li>调节亮度，确认背光调节正常，从最低到最高无闪烁</li>
<li>检查是否有明显的阴阳屏现象（屏幕两侧色温不一致）</li>
<li><strong>可视角度测试</strong>：从上下左右不同角度观察屏幕，检查色彩偏移程度</li>
<li><strong>刷新率检查</strong>：右键桌面 → 显示设置 → 高级显示设置，确认可选刷新率与宣传一致</li>
</ul>
</li>
</ol>
<h3>性能检测工具推荐</h3>
<ol>
<li><strong>CPU-Z</strong>：查看处理器详细信息</li>
<li><strong>GPU-Z</strong>：查看显卡详细信息</li>
<li><strong>CrystalDiskInfo</strong>：检查硬盘健康状态和通电时间</li>
<li><strong>图吧工具箱</strong>：集成多种检测工具的合集包</li>
</ol>
<h3>硬盘通电时间检查</h3>
<p>使用 CrystalDiskInfo 软件：</p>
<ul>
<li>查看"通电次数"和"通电时间"</li>
<li>全新硬盘通电时间通常在10小时以内（出厂测试）</li>
<li>通电次数一般在50次以内</li>
<li>如数值过大，可能为样机或退货机</li>
</ul>
<h2>第五步：烤机测试</h2>
<p>烤机测试的目的是检验电脑在高负载下的稳定性和散热表现。建议测试时长为30分钟至1小时。</p>
<h3>准备工作</h3>
<ol>
<li>
<p><strong>安装必要软件</strong></p>
<ul>
<li>AIDA64：系统稳定性测试</li>
<li>FurMark：显卡压力测试</li>
<li>HWMonitor 或 HWiNFO：实时监控温度、频率</li>
</ul>
</li>
<li>
<p><strong>测试环境</strong></p>
<ul>
<li>保持室内通风良好</li>
<li>将笔记本放置在硬质平面上，确保底部进风口畅通</li>
<li>关闭不必要的后台程序</li>
</ul>
</li>
</ol>
<h3>CPU 烤机测试</h3>
<p>使用 AIDA64 进行FPU压力测试：</p>
<ol>
<li>打开 AIDA64，点击"工具" → "系统稳定性测试"</li>
<li>勾选"Stress FPU"（其他选项可不选，单独测试CPU）</li>
<li>点击"Start"开始测试</li>
<li>观察以下内容：
<ul>
<li><strong>CPU温度</strong>：一般不超过95℃为宜，轻薄本可能达到90-100℃，游戏本应控制在85-95℃</li>
<li><strong>CPU频率</strong>：是否稳定，有无大幅降频（Throttling）</li>
<li><strong>功耗</strong>：观察CPU功耗是否达到标称TDP</li>
<li><strong>系统稳定性</strong>：是否出现蓝屏、死机、重启、程序崩溃</li>
</ul>
</li>
<li><strong>测试时长</strong>：建议至少15-30分钟，让温度达到稳定状态</li>
<li><strong>记录数据</strong>：截图保存温度和频率曲线，便于对比分析</li>
</ol>
<h3>GPU 烤机测试</h3>
<p>使用 FurMark 进行测试：</p>
<ol>
<li>打开 FurMark，选择合适的分辨率（建议1080p）和抗锯齿等级</li>
<li>点击"GPU stress test"开始测试</li>
<li>观察以下内容：
<ul>
<li><strong>GPU温度</strong>：一般不超过85℃为宜，最高不应超过90℃</li>
<li><strong>帧率（FPS）</strong>：是否稳定，有无剧烈波动</li>
<li><strong>画面质量</strong>：有无花屏、artifacts（异常图形）、撕裂、闪烁</li>
<li><strong>功耗</strong>：观察GPU功耗是否达到标称值</li>
<li><strong>系统稳定性</strong>：是否崩溃、驱动重置、蓝屏</li>
</ul>
</li>
<li><strong>测试时长</strong>：建议15-30分钟</li>
<li><strong>注意事项</strong>：
<ul>
<li>FurMark负载极高，可能导致温度快速上升，属正常现象</li>
<li>如温度超过90℃且持续上升，应立即停止测试</li>
<li>独显直连机型应确保使用独立显卡进行测试</li>
</ul>
</li>
</ol>
<h3>双烤测试（进阶）</h3>
<p>同时运行 AIDA64 FPU 测试和 FurMark：</p>
<ul>
<li>这是对笔记本散热系统的极限考验，模拟最恶劣的使用场景</li>
<li>测试时间建议15-30分钟，无需过长</li>
<li><strong>重点关注</strong>：
<ul>
<li>CPU和GPU的温度变化曲线</li>
<li>是否出现严重降频（频率大幅下降）</li>
<li>总功耗是否达到整机散热设计上限</li>
<li>如出现过热保护关机、蓝屏，说明散热存在严重问题</li>
</ul>
</li>
<li><strong>预期表现</strong>：
<ul>
<li>游戏本：CPU 85-95℃，GPU 80-85℃，性能释放充分</li>
<li>轻薄本：CPU 90-100℃，可能出现较明显降频，属正常现象</li>
<li>风扇转速达到最高，噪音较大，但应平稳无杂音</li>
</ul>
</li>
</ul>
<h3>键盘区域温度测试</h3>
<p>烤机过程中和结束后：</p>
<ul>
<li>用手触摸键盘区域，特别是WASD键位、方向键和中上部</li>
<li>感受是否有烫手的感觉（超过45℃会有明显不适）</li>
<li><strong>正常表现</strong>：应该有温热感（35-42℃），但不应影响正常使用</li>
<li><strong>异常情况</strong>：如某些区域烫手无法触碰，说明散热设计或导热存在问题</li>
<li><strong>建议使用温度计或红外测温仪</strong>：获得更准确的温度数据</li>
</ul>
<h3>风扇噪音测试</h3>
<ul>
<li>烤机时注意听风扇声音</li>
<li><strong>正常表现</strong>：应该是平稳的风声，音量随温度升高而增大</li>
<li><strong>异常表现</strong>：
<ul>
<li>摩擦声、尖锐声、咔哒声：可能存在轴承故障或异物</li>
<li>忽大忽小的喘息声：风扇控制策略有问题</li>
<li>异响伴随震动：风扇安装不当或叶片变形</li>
</ul>
</li>
<li><strong>待机噪音</strong>：低负载时风扇应几乎无声或完全停转（支持智能启停的机型）</li>
</ul>
<h2>第六步：功能测试</h2>
<h3>接口测试</h3>
<ol>
<li>
<p><strong>USB接口</strong></p>
<ul>
<li>插入U盘或移动硬盘，测试数据传输是否正常</li>
<li>测试每个USB接口是否都能识别设备</li>
<li>检查USB 2.0和3.0/3.1/3.2接口的传输速度差异</li>
<li>测试热插拔功能，拔出后再插入是否能重新识别</li>
</ul>
</li>
<li>
<p><strong>音频接口</strong></p>
<ul>
<li>插入耳机，测试左右声道是否正常</li>
<li>播放立体声音乐，确认声道分离度</li>
<li>测试麦克风录音功能，录制后回放检查音质</li>
<li>如有多个音频接口，逐一测试</li>
</ul>
</li>
<li>
<p><strong>视频输出</strong></p>
<ul>
<li>如有HDMI、DisplayPort或Type-C视频输出，连接显示器或投影仪测试</li>
<li>确认外接显示正常，分辨率和刷新率可调</li>
<li>测试扩展模式和复制模式</li>
<li>如有雷电接口，测试数据传输和视频输出功能</li>
</ul>
</li>
<li>
<p><strong>读卡器</strong>（如有）</p>
<ul>
<li>插入SD卡或TF卡，测试读取功能</li>
<li>复制文件测试读写速度</li>
<li>确认支持的卡类型（SD/SDHC/SDXC等）</li>
</ul>
</li>
<li>
<p><strong>网线接口</strong>（如有）</p>
<ul>
<li>插入网线，测试有线网络连接</li>
<li>确认网口指示灯正常闪烁</li>
<li>测试网络速度和稳定性</li>
</ul>
</li>
</ol>
<h3>无线网络测试</h3>
<ol>
<li>
<p><strong>Wi-Fi测试</strong></p>
<ul>
<li>连接Wi-Fi，测试网速是否正常（可使用 speedtest.net 测速）</li>
<li>测试信号强度，在不同位置观察信号变化</li>
<li>测试2.4GHz和5GHz频段（如支持）</li>
<li>测试Wi-Fi 6/6E/7特性（如路由器支持）</li>
<li>测试网络稳定性，长时间下载有无断流</li>
</ul>
</li>
<li>
<p><strong>蓝牙测试</strong></p>
<ul>
<li>配对蓝牙设备（鼠标、键盘、耳机、音箱等）</li>
<li>测试连接稳定性和有效距离</li>
<li>测试音频设备的音质和延迟</li>
<li>测试多设备同时连接的稳定性</li>
<li>检查蓝牙版本是否与宣传一致（在设备管理器中查看）</li>
</ul>
</li>
</ol>
<h3>摄像头和麦克风</h3>
<ol>
<li>
<p><strong>摄像头</strong></p>
<ul>
<li>打开相机应用，测试前置摄像头（部分机型有后置）</li>
<li>检查画质是否清晰，色彩还原是否准确</li>
<li>测试自动对焦功能（如支持）</li>
<li>检查低光环境下的表现</li>
<li>测试隐私开关或物理遮挡片（如配备）</li>
<li>确认摄像头分辨率与宣传一致（可在相机设置中查看）</li>
</ul>
</li>
<li>
<p><strong>麦克风</strong></p>
<ul>
<li>使用录音机应用录制声音</li>
<li>回放检查音质、音量和清晰度</li>
<li>测试降噪功能（如支持）</li>
<li>如有多个麦克风，测试阵列收音效果</li>
<li>进行视频通话测试，检查实际使用效果</li>
</ul>
</li>
</ol>
<h3>扬声器测试</h3>
<ul>
<li>播放不同类型的音乐（流行、古典、摇滚等）</li>
<li>测试左右声道是否平衡，立体声效果是否正常</li>
<li>检查最大音量下有无破音、失真或共振</li>
<li>测试低音和高音的表现</li>
<li>如有杜比音效、DTS等音效技术，开启后测试效果差异</li>
<li>在不同音量级别下测试，确认无明显底噪</li>
</ul>
<h3>其他功能测试</h3>
<ol>
<li>
<p><strong>指纹识别</strong>（如配备）</p>
<ul>
<li>录入指纹，测试识别速度和准确率</li>
<li>测试湿手指、脏手指的识别能力</li>
<li>测试Windows Hello登录功能</li>
</ul>
</li>
<li>
<p><strong>面部识别</strong>（如配备）</p>
<ul>
<li>设置Windows Hello面部识别</li>
<li>测试不同光线条件下的识别效果</li>
<li>测试戴眼镜、帽子等情况下的识别率</li>
</ul>
</li>
<li>
<p><strong>背光键盘</strong></p>
<ul>
<li>测试背光亮度调节（如有多级调节）</li>
<li>检查背光均匀性，有无暗区</li>
<li>测试背光自动关闭功能</li>
</ul>
</li>
<li>
<p><strong>传感器测试</strong></p>
<ul>
<li>重力感应：旋转屏幕测试自动旋转（平板模式或翻转本）</li>
<li>光线传感器：测试自动亮度调节</li>
<li>霍尔传感器：合盖后是否自动睡眠</li>
</ul>
</li>
<li>
<p><strong>扩展功能</strong></p>
<ul>
<li>如有数字小键盘，测试所有按键</li>
<li>如有独立功能键，测试多媒体控制、飞行模式等</li>
<li>测试电源键指纹二合一功能（如支持）</li>
</ul>
</li>
</ol>
<h2>第七步：软件激活与驱动更新</h2>
<h3>确认无误后激活系统</h3>
<p>经过以上所有测试，如未发现任何问题，可以连接网络激活Windows系统：</p>
<ol>
<li>连接Wi-Fi或有线网络</li>
<li>系统会自动激活，或手动输入产品密钥</li>
<li>登录Microsoft账户同步设置</li>
</ol>
<h3>Office激活（如包含）</h3>
<ul>
<li>打开任意Office组件（Word、Excel等）</li>
<li>登录Microsoft账户</li>
<li>按照提示激活预装的Office</li>
</ul>
<h3>驱动更新</h3>
<ol>
<li>
<p><strong>官方渠道优先</strong></p>
<ul>
<li>访问笔记本品牌官网</li>
<li>下载对应型号的最新驱动程序</li>
<li>重点更新：芯片组、显卡、声卡、网卡驱动</li>
</ul>
</li>
<li>
<p><strong>Windows Update</strong></p>
<ul>
<li>运行Windows更新，安装推荐的驱动</li>
<li>注意：部分驱动可能不是最新版本</li>
</ul>
</li>
<li>
<p><strong>避免使用第三方驱动软件</strong></p>
<ul>
<li>不建议使用驱动精灵、驱动人生等第三方工具</li>
<li>这些软件可能捆绑广告或安装不必要的内容</li>
</ul>
</li>
</ol>
<h2>常见问题与注意事项</h2>
<h3>关于退换货</h3>
<ol>
<li>
<p><strong>七天无理由退货</strong></p>
<ul>
<li>未激活状态下可享受七天无理由退货</li>
<li>激活后除非有质量问题，否则不支持无理由退货</li>
<li>保留好包装和所有配件</li>
</ul>
</li>
<li>
<p><strong>质量问题认定</strong></p>
<ul>
<li>屏幕坏点超过国家标准</li>
<li>硬件故障（无法开机、频繁蓝屏等）</li>
<li>外观瑕疵（严重划痕、磕碰）</li>
<li>配置与宣传不符</li>
</ul>
</li>
</ol>
<h3>关于保修</h3>
<ol>
<li>
<p><strong>保修起始时间</strong></p>
<ul>
<li>以发票日期或系统激活日期为准</li>
<li>建议保留购买凭证</li>
</ul>
</li>
<li>
<p><strong>保修范围</strong></p>
<ul>
<li>了解官方保修政策</li>
<li>注意人为损坏不在保修范围内</li>
<li>部分品牌提供意外保护服务（需额外购买）</li>
</ul>
</li>
</ol>
<h3>验机时间安排</h3>
<ul>
<li><strong>当天完成</strong>：外观检查、基本功能测试</li>
<li><strong>一周内完成</strong>：烤机测试、日常使用体验</li>
<li><strong>持续关注</strong>：电池续航、长期稳定性</li>
</ul>
<h2>总结</h2>
<p>完整的验机流程虽然繁琐，但能有效保障您的权益。关键要点如下：</p>
<ol>
<li>开箱全程录像，保留证据</li>
<li>仔细检查外观，不放过任何细节</li>
<li>联网前完成所有硬件检测</li>
<li>跳过网络激活，保留退货权利</li>
<li>充分烤机测试，验证散热和稳定性</li>
<li>全面测试各项功能，确保正常使用</li>
<li>确认无误后再激活系统和软件</li>
</ol>
<p>希望这篇指南能帮助您顺利完成新机验机，享受愉快的使用体验。如发现问题，及时联系商家或品牌售后处理。</p>
]]></content>
    <author><name>蓝影Shadow</name></author>
    <category term="分享"/>
  </entry>
  <entry>
    <title>Windows 电脑搭建 Minecraft Java 版服务器保姆级教程</title>
    <link href="https://blog.yufurry.cn/posts/00000008/" rel="alternate" type="text/html"/>
    <id>https://blog.yufurry.cn/posts/00000008/</id>
    <published>2026-04-07T00:00:00.000Z</published>
    <updated>2026-04-07T00:00:00.000Z</updated>
    <summary>从零开始在 Windows 电脑上搭建 Minecraft Java 版服务器的完整指南，包含环境配置、服务端安装、参数优化和客户端连接等详细步骤</summary>
    <content type="html"><![CDATA[<h1>Windows 电脑搭建 Minecraft Java 版服务器保姆级教程</h1>
<p>大家好！今天给大家带来一篇超详细的 Minecraft Java 版服务器搭建教程，从零基础开始，手把手教你在自己的 Windows 电脑上搭建一个专属的 MC 服务器，让小伙伴们可以一起联机玩耍！</p>
<h2>准备工作</h2>
<h3>1. 系统要求</h3>
<ul>
<li><strong>操作系统</strong>：Windows 10 或 Windows 11（64位）</li>
<li><strong>内存</strong>：建议至少 8GB RAM（服务器占用 + 系统运行）</li>
<li><strong>硬盘空间</strong>：至少 10GB 可用空间</li>
<li><strong>网络</strong>：稳定的网络连接</li>
</ul>
<h3>2. 需要下载的软件</h3>
<ul>
<li><strong>Java 运行环境</strong>（JRE/JDK）</li>
<li><strong>Minecraft 服务端核心文件</strong></li>
<li><strong>文本编辑器</strong>（推荐 Notepad++ 或 VS Code）</li>
</ul>
<h2>第一步：安装 Java 环境</h2>
<p>Minecraft Java 版服务器必须依赖 Java 环境才能运行。</p>
<h3>方法一：下载官方 JDK（推荐）</h3>
<ol>
<li>
<p><strong>访问 Oracle 官网下载页面</strong></p>
<ul>
<li>打开浏览器，访问：<a href="https://www.oracle.com/java/technologies/downloads/">https://www.oracle.com/java/technologies/downloads/</a></li>
<li>或者使用开源的 OpenJDK：<a href="https://adoptium.net/">https://adoptium.net/</a></li>
</ul>
</li>
<li>
<p><strong>选择合适的版本</strong></p>
<ul>
<li>Minecraft 1.17 及以下版本：需要 <strong>Java 8</strong> 或 <strong>Java 11</strong></li>
<li>Minecraft 1.18 - 1.20.4：需要 <strong>Java 17</strong></li>
<li>Minecraft 1.20.5 及以上：需要 <strong>Java 21</strong></li>
</ul>
<blockquote>
<p><strong>建议</strong>：如果你不确定要玩哪个版本，推荐下载 <strong>Java 17</strong>，兼容性最好</p>
</blockquote>
</li>
<li>
<p><strong>下载安装包</strong></p>
<ul>
<li>选择 <strong>Windows x64 Installer</strong>（.exe 文件）</li>
<li>点击下载</li>
</ul>
</li>
<li>
<p><strong>安装 Java</strong></p>
<ul>
<li>双击下载的 .exe 文件</li>
<li>点击"下一步"，保持默认安装路径即可</li>
<li>等待安装完成</li>
</ul>
</li>
<li>
<p><strong>验证安装</strong></p>
<ul>
<li>按 <code>Win + R</code>，输入 <code>cmd</code>，回车打开命令提示符</li>
<li>输入以下命令并回车：<pre><code>java -version
</code></pre>
</li>
<li>如果显示类似以下内容，说明安装成功：<pre><code>java version "17.0.x" 202x-xx-xx LTS
Java(TM) SE Runtime Environment (build 17.0.x+x-LTS-x)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.x+x-LTS-x, mixed mode, sharing)
</code></pre>
</li>
</ul>
</li>
</ol>
<h3>方法二：使用 Microsoft Store 安装（更简单）</h3>
<ol>
<li>打开 Microsoft Store</li>
<li>搜索 "Java" 或 "OpenJDK"</li>
<li>选择合适的版本安装</li>
<li>同样用 <code>java -version</code> 验证</li>
</ol>
<h2>第二步：下载 Minecraft 服务端</h2>
<h3>1. 确定游戏版本</h3>
<p>首先决定你要搭建哪个版本的服务器。常见版本：</p>
<ul>
<li><strong>1.20.1</strong>：稳定版本，模组资源丰富</li>
<li><strong>1.19.4</strong>：较新版本</li>
<li><strong>1.16.5</strong>：经典版本，优化好</li>
<li><strong>1.12.2</strong>：老牌版本，大量模组支持</li>
</ul>
<blockquote>
<p><strong>建议新手</strong>：选择 <strong>1.20.1</strong> 版本，既有新特性又稳定</p>
</blockquote>
<h3>2. 下载服务端核心文件</h3>
<h4>方式 A：官方 Vanilla 服务端（纯净原版）</h4>
<ol>
<li>
<p>访问 Minecraft 官方下载页面：
<a href="https://www.minecraft.net/zh-hans/download/server">https://www.minecraft.net/zh-hans/download/server</a></p>
</li>
<li>
<p>点击 "minecraft_server.x.xx.x.jar" 下载按钮</p>
<ul>
<li>例如：<code>minecraft_server.1.20.1.jar</code></li>
</ul>
</li>
<li>
<p>将下载的 .jar 文件保存到一个新建的文件夹中</p>
<ul>
<li>建议在 D 盘或 E 盘创建一个文件夹，如：<code>D:\MC_Server</code></li>
<li>把 jar 文件放进去</li>
</ul>
</li>
</ol>
<h4>方式 B：Paper 服务端（推荐，性能更好）</h4>
<p>Paper 是基于官方服务端的优化版本，性能更好，bug 更少。</p>
<ol>
<li>
<p>访问 PaperMC 官网：
<a href="https://papermc.io/downloads/paper">https://papermc.io/downloads/paper</a></p>
</li>
<li>
<p>选择 Minecraft 版本（如 1.20.1）</p>
</li>
<li>
<p>下载最新构建版本的 .jar 文件</p>
</li>
<li>
<p>同样放到服务器文件夹中</p>
</li>
</ol>
<h4>方式 C：Forge/Fabric 服务端（支持模组）</h4>
<p>如果你想玩模组，需要下载对应的模组加载器服务端。</p>
<p><strong>Forge 服务端：</strong></p>
<ul>
<li>访问：<a href="https://files.minecraftforge.net/">https://files.minecraftforge.net/</a></li>
<li>选择版本，下载 "Installer"</li>
<li>运行 installer，选择 "Install server"，指定安装目录</li>
</ul>
<p><strong>Fabric 服务端：</strong></p>
<ul>
<li>访问：<a href="https://fabricmc.net/use/server/">https://fabricmc.net/use/server/</a></li>
<li>下载对应版本的服务器 jar</li>
</ul>
<blockquote>
<p><strong>新手建议</strong>：先从 <strong>Paper 服务端</strong> 开始，熟悉后再尝试模组服务端</p>
</blockquote>
<h2>第三步：首次启动服务器</h2>
<h3>1. 创建启动脚本</h3>
<p>在服务器文件夹（如 <code>D:\MC_Server</code>）中：</p>
<ol>
<li>
<p>右键空白处 → 新建 → 文本文档</p>
</li>
<li>
<p>重命名为 <code>start.bat</code>（注意扩展名是 .bat 不是 .txt）</p>
<ul>
<li>如果看不到扩展名，点击文件夹上方的"查看" → 勾选"文件扩展名"</li>
</ul>
</li>
<li>
<p>右键 <code>start.bat</code> → 用记事本打开</p>
</li>
<li>
<p>根据你下载的服务端类型，输入以下内容：</p>
</li>
</ol>
<p><strong>如果是官方 Vanilla 服务端：</strong></p>
<pre><code>@echo off
java -Xms2G -Xmx4G -jar minecraft_server.1.20.1.jar nogui
pause
</code></pre>
<p><strong>如果是 Paper 服务端：</strong></p>
<pre><code>@echo off
java -Xms2G -Xmx4G -jar paper-1.20.1-xxx.jar nogui
pause
</code></pre>
<blockquote>
<p><strong>参数说明：</strong></p>
<ul>
<li><code>-Xms2G</code>：初始分配 2GB 内存</li>
<li><code>-Xmx4G</code>：最大分配 4GB 内存（根据你的电脑调整）</li>
<li><code>-jar</code>：指定要运行的 jar 文件</li>
<li><code>nogui</code>：不启动图形界面，节省资源</li>
<li><code>pause</code>：运行结束后暂停，方便查看错误信息</li>
</ul>
</blockquote>
<blockquote>
<p><strong>内存分配建议：</strong></p>
<ul>
<li>8GB 内存电脑：<code>-Xms2G -Xmx4G</code></li>
<li>16GB 内存电脑：<code>-Xms4G -Xmx8G</code></li>
<li>32GB 内存电脑：<code>-Xms8G -Xmx16G</code></li>
</ul>
<p>不要分配超过物理内存的 70%，否则会导致系统卡顿</p>
</blockquote>
<h3>2. 同意 EULA（用户协议）</h3>
<ol>
<li>双击运行 <code>start.bat</code></li>
<li>服务器会启动然后立即关闭，这是正常的</li>
<li>文件夹中会生成一个 <code>eula.txt</code> 文件</li>
<li>用记事本打开 <code>eula.txt</code></li>
<li>找到这一行：<pre><code>eula=false
</code></pre>
</li>
<li>改为：<pre><code>eula=true
</code></pre>
</li>
<li>保存并关闭</li>
</ol>
<h3>3. 正式启动服务器</h3>
<ol>
<li>再次双击 <code>start.bat</code></li>
<li>这次服务器会正常启动</li>
<li>等待看到类似这样的提示：<pre><code>[Server thread/INFO]: Done (xx.xxxs)! For help, type "help"
</code></pre>
</li>
<li>这说明服务器启动成功了！</li>
</ol>
<blockquote>
<p><strong>注意</strong>：首次启动会生成世界文件，可能需要几分钟时间，请耐心等待</p>
</blockquote>
<h2>第四步：配置服务器</h2>
<p>服务器文件夹中会生成很多文件，最重要的是 <code>server.properties</code>，这是服务器的主配置文件。</p>
<h3>1. 编辑 server.properties</h3>
<ol>
<li>关闭服务器（在命令行窗口按 <code>Ctrl + C</code>，或输入 <code>stop</code> 后回车）</li>
<li>用记事本或 Notepad++ 打开 <code>server.properties</code></li>
<li>以下是常用配置项及说明：</li>
</ol>
<pre><code># ===== 基本设置 =====
# 服务器端口（默认25565，一般不需要改）
server-port=25565

# 服务器名称（会在服务器列表中显示）
motd=A Minecraft Server

# 最大玩家数量
max-players=20

# 游戏模式：survival(生存), creative(创造), adventure(冒险), spectator(旁观)
gamemode=survival

# 难度：peaceful(和平), easy(简单), normal(普通), hard(困难)
difficulty=normal

# 是否开启 PvP（玩家对战）
pvp=true

# 是否允许飞行（创造模式下总是可以飞）
allow-flight=false

# 世界名称
level-name=world

# 种子（留空则随机生成，可以填入数字或字符串）
level-seed=

# ===== 高级设置 =====
# 视距（区块数量，越大越卡）
view-distance=10

# 模拟距离
simulation-distance=10

# 是否生成结构（村庄、要塞等）
generate-structures=true

# 是否启用命令方块
enable-command-block=false

# OP 权限等级（1-4）
op-permission-level=4

# 是否启用白名单
white-list=false

# 是否在线验证（正版验证）
# true = 只允许正版账号加入
# false = 允许盗版/离线账号加入
online-mode=true

# 最大建筑高度
max-build-height=256

# 是否允许下界
allow-nether=true

# 是否允许末地
allow-end=true

# 动物生成上限
spawn-animals=true

# 怪物生成上限
spawn-monsters=true

# NPC 村民生成
spawn-npcs=true

# 是否启用出生点保护
spawn-protection=16

# 玩家闲置超时踢出（分钟，0为不踢）
player-idle-timeout=0

# 网络压缩阈值
network-compression-threshold=256

# 是否启用查询功能
enable-query=false

# RCON 远程控制台密码（如需远程控制）
rcon.password=
rcon.port=25575
</code></pre>
<h3>2. 重要配置详解</h3>
<h4>游戏模式设置</h4>
<pre><code>gamemode=survival          # 生存模式
gamemode=creative          # 创造模式
gamemode=adventure         # 冒险模式
gamemode=spectator         # 旁观模式
</code></pre>
<h4>玩家管理</h4>
<pre><code># 最大玩家数（根据你的网络和电脑性能调整）
max-players=10

# 白名单模式（只允许指定玩家加入）
white-list=true

# 启用白名单后，需要在游戏中或用控制台添加玩家
# 命令：/whitelist add 玩家名
</code></pre>
<h4>正版验证</h4>
<pre><code># 如果你有正版账号，建议开启
online-mode=true

# 如果朋友都是离线账号，需要关闭
online-mode=false
</code></pre>
<blockquote>
<p><strong>注意</strong>：<code>online-mode=false</code> 时任何人都可以用任意名字加入，存在安全风险</p>
</blockquote>
<h4>世界生成</h4>
<pre><code># 自定义种子（可以网上找好看的种子）
level-seed=123456789

# 或者使用文字种子
level-seed=village_at_spawn

# 视距设置（影响性能和视野）
# 低配电脑：6-8
# 中等配置：10-12
# 高配电脑：15-20
view-distance=10
</code></pre>
<h3>3. 保存配置</h3>
<p>修改完 <code>server.properties</code> 后：</p>
<ol>
<li>保存文件（Ctrl + S）</li>
<li>重新启动服务器（双击 <code>start.bat</code>）</li>
<li>新的配置就会生效</li>
</ol>
<h2>第五步：连接到服务器</h2>
<h3>本地连接（同一台电脑）</h3>
<ol>
<li>启动 Minecraft Java 版客户端</li>
<li>点击"多人游戏"</li>
<li>点击"添加服务器"或"直接连接"</li>
<li>服务器地址输入：<code>localhost</code> 或 <code>127.0.0.1</code></li>
<li>点击"完成"或"加入服务器"</li>
<li>成功进入！</li>
</ol>
<h3>局域网连接（同一 WiFi 下的其他设备）</h3>
<ol>
<li>
<p>查找你的本地 IP 地址：</p>
<ul>
<li>按 <code>Win + R</code>，输入 <code>cmd</code>，回车</li>
<li>输入 <code>ipconfig</code>，回车</li>
<li>找到 "IPv4 地址"，类似 <code>192.168.1.100</code></li>
</ul>
</li>
<li>
<p>在其他设备上：</p>
<ul>
<li>打开 Minecraft</li>
<li>多人游戏 → 添加服务器</li>
<li>服务器地址输入你的 IPv4 地址，如：<code>192.168.1.100</code></li>
<li>端口默认是 25565，如果没改就不用写</li>
<li>如果改了端口，格式为：<code>192.168.1.100:25565</code></li>
</ul>
</li>
</ol>
<h3>外网连接（让互联网上的朋友加入）</h3>
<p>这需要<strong>端口映射</strong>或<strong>内网穿透</strong>，比较复杂。</p>
<h4>方法 A：路由器端口映射（需要公网 IP）</h4>
<ol>
<li>
<p><strong>确认你有公网 IP</strong></p>
<ul>
<li>访问 <a href="https://ip.cn">https://ip.cn</a> 查看你的公网 IP</li>
<li>登录路由器管理页面，查看 WAN 口 IP</li>
<li>如果两个 IP 相同，说明有公网 IP</li>
</ul>
</li>
<li>
<p><strong>登录路由器管理页面</strong></p>
<ul>
<li>浏览器输入路由器地址（通常是 <code>192.168.1.1</code> 或 <code>192.168.0.1</code>）</li>
<li>输入管理员账号密码</li>
</ul>
</li>
<li>
<p><strong>设置端口映射/虚拟服务器</strong></p>
<ul>
<li>找到"端口映射"、"虚拟服务器"或"NAT 设置"</li>
<li>添加新规则：
<ul>
<li>外部端口：25565</li>
<li>内部端口：25565</li>
<li>内部 IP：你的电脑 IP（如 192.168.1.100）</li>
<li>协议：TCP 和 UDP（或选择"全部"）</li>
</ul>
</li>
<li>保存</li>
</ul>
</li>
<li>
<p><strong>告诉朋友你的公网 IP</strong></p>
<ul>
<li>他们连接时输入：<code>你的公网IP:25565</code></li>
<li>例如：<code>123.45.67.89:25565</code></li>
</ul>
</li>
</ol>
<blockquote>
<p><strong>注意</strong>：</p>
<ul>
<li>每次重启路由器，公网 IP 可能会变化</li>
<li>可以考虑使用 DDNS（动态域名解析）</li>
<li>确保防火墙允许 25565 端口</li>
</ul>
</blockquote>
<h4>方法 B：使用内网穿透工具（无需公网 IP）</h4>
<p>如果运营商不提供公网 IP，可以使用内网穿透服务：</p>
<p><strong>推荐工具：</strong></p>
<ul>
<li><strong>SakuraFrp</strong>：<a href="https://www.natfrp.com/">https://www.natfrp.com/</a>（免费额度够用）</li>
<li><strong>Ngrok</strong>：<a href="https://ngrok.com/">https://ngrok.com/</a></li>
<li><strong>花生壳</strong>：<a href="https://hsk.oray.com/">https://hsk.oray.com/</a></li>
</ul>
<p>以 SakuraFrp 为例：</p>
<ol>
<li>注册 SakuraFrp 账号</li>
<li>下载客户端</li>
<li>创建隧道：
<ul>
<li>隧道类型：TCP</li>
<li>本地 IP：127.0.0.1</li>
<li>本地端口：25565</li>
</ul>
</li>
<li>启动隧道，获得一个域名</li>
<li>朋友连接时使用该域名</li>
</ol>
<h4>方法 C：使用第三方开服平台</h4>
<p>如果觉得太麻烦，可以考虑：</p>
<ul>
<li><strong>Aternos</strong>：<a href="https://aternos.org/">https://aternos.org/</a>（完全免费）</li>
<li><strong>Minehut</strong>：<a href="https://minehut.com/">https://minehut.com/</a></li>
<li><strong>腾讯云/阿里云</strong>：购买云服务器自己搭建</li>
</ul>
<h2>第六步：服务器管理</h2>
<h3>常用控制台命令</h3>
<p>在服务器命令行窗口中可以直接输入命令：</p>
<pre><code># 查看帮助
help

# 停止服务器（正常关闭）
stop

# 保存世界
save-all

# 备份世界
save-off        # 暂停自动保存
save-on         # 恢复自动保存

# 给予玩家 OP 权限
op 玩家名

# 取消 OP 权限
deop 玩家名

# 封禁玩家
ban 玩家名

# 解封玩家
pardon 玩家名

# 查看在线玩家
list

# 更改游戏模式
gamemode survival 玩家名
gamemode creative 玩家名

# 传送玩家
tp 玩家名1 玩家名2

# 广播消息
say 大家好，欢迎来到服务器！

# 设置出生点
setworldspawn

# 获取游戏规则列表
gamerule

# 设置是否掉落物品
gamerule keepInventory true

# 设置时间
time set day       # 白天
time set night     # 夜晚
time set noon      # 中午

# 设置天气
weather clear      # 晴天
weather rain       # 下雨
weather thunder    # 雷雨
</code></pre>
<h3>管理玩家权限</h3>
<h4>1. 使用 OP 权限</h4>
<p>OP（Operator）是服务器管理员，拥有所有权限。</p>
<pre><code># 在控制台中
op Steve

# 在游戏中（需要已经是 OP）
/op Steve
</code></pre>
<h4>2. 使用白名单</h4>
<p>只允许特定玩家加入：</p>
<pre><code># 启用白名单
whitelist on

# 添加玩家到白名单
whitelist add Steve
whitelist add Alex

# 移除玩家
whitelist remove Steve

# 查看白名单列表
whitelist list

# 重新加载白名单
whitelist reload
</code></pre>
<p>也可以在 <code>server.properties</code> 中设置：</p>
<pre><code>white-list=true
</code></pre>
<p>然后在 <code>whitelist.json</code> 文件中手动添加玩家 UUID。</p>
<h3>安装插件（仅限 Paper/Spigot 服务端）</h3>
<p>如果你使用的是 Paper 或 Spigot 服务端，可以安装插件来增强功能。</p>
<ol>
<li>
<p><strong>下载插件</strong></p>
<ul>
<li>热门插件网站：
<ul>
<li><a href="https://www.spigotmc.org/resources/">SpigotMC</a></li>
<li><a href="https://dev.bukkit.org/">Bukkit</a></li>
</ul>
</li>
</ul>
</li>
<li>
<p><strong>常用插件推荐</strong></p>
<ul>
<li><strong>EssentialsX</strong>：基础命令扩展</li>
<li><strong>WorldEdit</strong>：世界编辑工具</li>
<li><strong>CoreProtect</strong>：方块操作记录（防熊孩子）</li>
<li><strong>LuckPerms</strong>：权限管理</li>
<li><strong>Vault</strong>：经济系统前置</li>
<li><strong>Multiverse-Core</strong>：多世界管理</li>
</ul>
</li>
<li>
<p><strong>安装插件</strong></p>
<ul>
<li>关闭服务器</li>
<li>将下载的 .jar 插件文件放入 <code>plugins</code> 文件夹</li>
<li>启动服务器</li>
<li>插件会自动加载并生成配置文件</li>
</ul>
</li>
<li>
<p><strong>配置插件</strong></p>
<ul>
<li>在 <code>plugins</code> 文件夹中找到对应插件的配置文件夹</li>
<li>编辑配置文件</li>
<li>重载插件：<code>/reload</code> 或 <code>/pluginname reload</code></li>
</ul>
</li>
</ol>
<h3>备份世界数据</h3>
<p>定期备份非常重要！</p>
<h4>手动备份</h4>
<ol>
<li>关闭服务器（输入 <code>stop</code>）</li>
<li>复制整个服务器文件夹，或只复制 <code>world</code>、<code>world_nether</code>、<code>world_the_end</code> 文件夹</li>
<li>粘贴到其他位置作为备份</li>
<li>重新启动服务器</li>
</ol>
<h4>自动备份脚本</h4>
<p>创建一个 <code>backup.bat</code> 文件：</p>
<pre><code>@echo off
set backup_folder=D:\MC_Backup
set server_folder=D:\MC_Server
set date_str=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%
set date_str=%date_str: =0%

if not exist "%backup_folder%" mkdir "%backup_folder%"

echo 正在备份服务器...
xcopy "%server_folder%\world" "%backup_folder%\world_%date_str%" /E /I /Y
xcopy "%server_folder%\world_nether" "%backup_folder%\world_nether_%date_str%" /E /I /Y
xcopy "%server_folder%\world_the_end" "%backup_folder%\world_the_end_%date_str%" /E /I /Y

echo 备份完成！
pause
</code></pre>
<p>建议每周备份一次，或在重大更新前备份。</p>
<h2>第七步：优化服务器性能</h2>
<h3>1. JVM 参数优化</h3>
<p>修改 <code>start.bat</code>，使用更优的 JVM 参数：</p>
<pre><code>@echo off
java -Xms4G -Xmx8G ^
     -XX:+UseG1GC ^
     -XX:+ParallelRefProcEnabled ^
     -XX:MaxGCPauseMillis=200 ^
     -XX:+UnlockExperimentalVMOptions ^
     -XX:+DisableExplicitGC ^
     -XX:+AlwaysPreTouch ^
     -XX:G1NewSizePercent=30 ^
     -XX:G1MaxNewSizePercent=40 ^
     -XX:G1HeapRegionSize=8M ^
     -XX:G1ReservePercent=20 ^
     -XX:G1HeapWastePercent=5 ^
     -XX:G1MixedGCCountTarget=4 ^
     -XX:InitiatingHeapOccupancyPercent=15 ^
     -XX:G1MixedGCLiveThresholdPercent=90 ^
     -XX:G1RSetUpdatingPauseTimePercent=5 ^
     -XX:SurvivorRatio=32 ^
     -XX:+PerfDisableSharedMem ^
     -XX:MaxTenuringThreshold=1 ^
     -jar paper-1.20.1-xxx.jar nogui
pause
</code></pre>
<h3>2. server.properties 优化</h3>
<pre><code># 降低视距（最影响性能）
view-distance=8
simulation-distance=8

# 减少实体数量
spawn-animals=true
spawn-monsters=true
spawn-npcs=true

# 关闭不必要的功能
enable-command-block=false
spawn-protection=0

# 调整 tick 速率（谨慎修改）
max-tick-time=60000
</code></pre>
<h3>3. 预生成世界</h3>
<p>使用插件预先生成世界，避免玩家探索时卡顿：</p>
<ul>
<li><strong>Chunky</strong> 插件：<a href="https://www.spigotmc.org/resources/chunky.81534/">https://www.spigotmc.org/resources/chunky.81534/</a></li>
</ul>
<p>安装后使用命令：</p>
<pre><code>/chunky radius 1000
/chunky start
</code></pre>
<h3>4. 清理无用数据</h3>
<p>定期清理：</p>
<ul>
<li>离线玩家的背包数据</li>
<li>多余的日志文件</li>
<li>旧的备份文件</li>
</ul>
<h2>常见问题及解决</h2>
<h3>1. 服务器启动失败</h3>
<p><strong>问题</strong>：双击 <code>start.bat</code> 后立即关闭</p>
<p><strong>解决</strong>：</p>
<ul>
<li>检查 Java 是否正确安装：<code>java -version</code></li>
<li>检查 jar 文件名是否与启动脚本中一致</li>
<li>查看生成的日志文件（<code>logs</code> 文件夹）</li>
<li>确保已同意 EULA（<code>eula=true</code>）</li>
</ul>
<h3>2. 无法连接服务器</h3>
<p><strong>问题</strong>：提示"连接超时"或"无法连接到服务器"</p>
<p><strong>解决</strong>：</p>
<ul>
<li>检查服务器是否正在运行</li>
<li>确认 IP 地址和端口是否正确</li>
<li>检查防火墙是否阻止了 25565 端口</li>
<li>本地连接使用 <code>localhost</code> 测试</li>
</ul>
<p><strong>开放防火墙端口</strong>：</p>
<ol>
<li>控制面板 → Windows Defender 防火墙 → 高级设置</li>
<li>入站规则 → 新建规则</li>
<li>端口 → TCP → 特定本地端口：25565</li>
<li>允许连接</li>
<li>命名规则并保存</li>
</ol>
<h3>3. 服务器很卡</h3>
<p><strong>问题</strong>：TPS（每秒刻数）低于 20</p>
<p><strong>解决</strong>：</p>
<ul>
<li>降低视距（<code>view-distance</code>）</li>
<li>减少最大玩家数</li>
<li>限制红石装置和实体数量</li>
<li>安装优化插件（如 ClearLag）</li>
<li>增加分配的内存</li>
<li>预生成世界</li>
</ul>
<h3>4. 正版验证问题</h3>
<p><strong>问题</strong>：朋友无法加入，提示认证失败</p>
<p><strong>解决</strong>：</p>
<ul>
<li>如果都是正版账号：确保 <code>online-mode=true</code></li>
<li>如果有离线账号：改为 <code>online-mode=false</code></li>
<li>注意：离线模式存在安全风险</li>
</ul>
<h3>5. 端口被占用</h3>
<p><strong>问题</strong>：提示"Address already in use"</p>
<p><strong>解决</strong>：</p>
<ul>
<li>更改 <code>server.properties</code> 中的 <code>server-port</code></li>
<li>或找出占用端口的程序并关闭：<pre><code>netstat -ano | findstr :25565
taskkill /PID 进程ID /F
</code></pre>
</li>
</ul>
<h3>6. 世界损坏</h3>
<p><strong>问题</strong>：服务器启动时提示世界损坏</p>
<p><strong>解决</strong>：</p>
<ul>
<li>从备份恢复</li>
<li>使用 MCEdit 等工具修复</li>
<li>删除损坏的区块文件（最后手段）</li>
</ul>
<h2>结语</h2>
<p>恭喜你！现在你已经成功搭建了自己的 Minecraft Java 版服务器！</p>
<p><strong>总结一下关键步骤：</strong></p>
<ol>
<li>安装 Java 环境</li>
<li>下载服务端核心文件</li>
<li>创建启动脚本并同意 EULA</li>
<li>配置 <code>server.properties</code></li>
<li>启动服务器并连接</li>
<li>设置端口映射（外网联机）</li>
<li>安装插件和优化性能</li>
</ol>
<p><strong>接下来你可以：</strong></p>
<ul>
<li>邀请朋友一起玩耍</li>
<li>探索各种插件和模组</li>
<li>学习更多服务器管理命令</li>
<li>定制专属的游戏体验</li>
<li>建立自己的社区</li>
</ul>
<p>如果在搭建过程中遇到问题，可以：</p>
<ul>
<li>查看服务器日志文件（<code>logs</code> 文件夹）</li>
<li>在 Minecraft 中文论坛求助</li>
<li>加入相关的 QQ 群或 Discord 社区</li>
</ul>
<p>祝你在 Minecraft 的世界里玩得开心！</p>
<hr />
<p><strong>相关链接：</strong></p>
<ul>
<li>Minecraft 官网：<a href="https://www.minecraft.net/">https://www.minecraft.net/</a></li>
<li>PaperMC 下载：<a href="https://papermc.io/">https://papermc.io/</a></li>
<li>SpigotMC 插件：<a href="https://www.spigotmc.org/">https://www.spigotmc.org/</a></li>
<li>Minecraft Wiki：<a href="https://minecraft.wiki/">https://minecraft.wiki/</a></li>
</ul>
]]></content>
    <author><name>蓝影Shadow</name></author>
    <category term="技术"/>
  </entry>
  <entry>
    <title>Windows 电脑搭建 Minecraft 基岩版服务器保姆级教程</title>
    <link href="https://blog.yufurry.cn/posts/00000009/" rel="alternate" type="text/html"/>
    <id>https://blog.yufurry.cn/posts/00000009/</id>
    <published>2026-04-07T00:00:00.000Z</published>
    <updated>2026-04-07T00:00:00.000Z</updated>
    <summary>从零开始在 Windows 电脑上搭建 Minecraft 基岩版（Bedrock Edition）服务器的完整指南，支持手机、平板、主机等多平台联机</summary>
    <content type="html"><![CDATA[<h1>Windows 电脑搭建 Minecraft 基岩版服务器保姆级教程</h1>
<p>大家好！继 Java 版服务器教程之后，今天给大家带来 <strong>Minecraft 基岩版（Bedrock Edition）</strong> 服务器的搭建教程。基岩版的最大优势是<strong>跨平台联机</strong>，可以让使用 Windows 10/11、手机（iOS/Android）、平板、Xbox、Switch 等不同设备的玩家一起玩耍！</p>
<h2>基岩版 vs Java版：有什么区别？</h2>
<p>在开始之前，先了解一下两个版本的区别：</p>
<table>
<thead>
<tr>
<th>特性</th>
<th>Java 版</th>
<th>基岩版</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>支持平台</strong></td>
<td>仅 PC（Windows/Mac/Linux）</td>
<td>多平台（PC/手机/主机）</td>
</tr>
<tr>
<td><strong>编程语言</strong></td>
<td>Java</td>
<td>C++</td>
</tr>
<tr>
<td><strong>模组支持</strong></td>
<td>丰富（Forge/Fabric）</td>
<td>有限（插件/Add-ons）</td>
</tr>
<tr>
<td><strong>性能</strong></td>
<td>依赖 Java 优化</td>
<td>原生性能更好</td>
</tr>
<tr>
<td><strong>红石机制</strong></td>
<td>原版红石</td>
<td>略有差异</td>
</tr>
<tr>
<td><strong>命令系统</strong></td>
<td>传统命令</td>
<td>更新的命令语法</td>
</tr>
<tr>
<td><strong>适合人群</strong></td>
<td>PC 玩家、模组爱好者</td>
<td>多平台联机、休闲玩家</td>
</tr>
</tbody>
</table>
<blockquote>
<p><strong>选择建议</strong>：</p>
<ul>
<li>如果朋友中有手机或主机玩家 → 选择<strong>基岩版</strong></li>
<li>如果想玩大量模组 → 选择<strong>Java 版</strong></li>
<li>如果都是 PC 玩家且喜欢技术玩法 → 选择<strong>Java 版</strong></li>
</ul>
</blockquote>
<h2>准备工作</h2>
<h3>1. 系统要求</h3>
<ul>
<li><strong>操作系统</strong>：Windows 10 或 Windows 11（64位）</li>
<li><strong>内存</strong>：建议至少 4GB RAM（基岩版比 Java 版更省资源）</li>
<li><strong>硬盘空间</strong>：至少 5GB 可用空间</li>
<li><strong>网络</strong>：稳定的网络连接</li>
<li><strong>Microsoft 账号</strong>：用于正版验证</li>
</ul>
<h3>2. 需要下载的软件</h3>
<ul>
<li><strong>Minecraft 基岩版服务端</strong>（官方提供）</li>
<li><strong>文本编辑器</strong>（推荐 Notepad++ 或 VS Code）</li>
<li><strong>可选</strong>：端口映射工具（外网联机需要）</li>
</ul>
<blockquote>
<p><strong>注意</strong>：基岩版服务器<strong>不需要安装 Java</strong>，这是与 Java 版最大的不同！</p>
</blockquote>
<h2>第一步：下载基岩版服务端</h2>
<h3>方法一：官方 Bedrock Dedicated Server（推荐）</h3>
<ol>
<li>
<p><strong>访问官方下载页面</strong></p>
<ul>
<li>打开浏览器，访问：
<a href="https://www.minecraft.net/zh-hans/download/server/bedrock">https://www.minecraft.net/zh-hans/download/server/bedrock</a></li>
</ul>
</li>
<li>
<p><strong>选择 Windows 版本</strong></p>
<ul>
<li>找到 "Bedrock Dedicated Server for Windows"</li>
<li>点击 "Download" 按钮</li>
<li>下载的是一个 .zip 压缩包</li>
</ul>
</li>
<li>
<p><strong>解压文件</strong></p>
<ul>
<li>在 D 盘或 E 盘创建一个文件夹，如：<code>D:\MC_Bedrock_Server</code></li>
<li>右键下载的 .zip 文件 → 解压到当前文件夹</li>
<li>将所有文件复制到 <code>D:\MC_Bedrock_Server</code></li>
</ul>
</li>
<li>
<p><strong>查看文件结构</strong>
解压后应该包含以下文件：</p>
<pre><code>D:\MC_Bedrock_Server\
├── bedrock_server.exe          # 服务器主程序
├── bedrock_server_how_to.html  # 使用说明
├── permissions.json            # 权限配置
├── server.properties           # 服务器配置
├── whitelist.json              # 白名单
├── worlds\                     # 世界文件夹
└── ...其他文件
</code></pre>
</li>
</ol>
<h3>方法二：使用第三方启动器（更简单）</h3>
<p>如果你觉得官方版本配置复杂，可以使用第三方工具：</p>
<p><strong>推荐工具：</strong></p>
<ul>
<li><strong>PocketMine-MP</strong>：<a href="https://pmmp.io/">https://pmmp.io/</a>（支持插件）</li>
<li><strong>Nukkit</strong>：<a href="https://cloudburstmc.org/">https://cloudburstmc.org/</a>（Java 编写，跨平台）</li>
<li><strong>LeviLamina</strong>：<a href="https://lamina.levimc.org/">https://lamina.levimc.org/</a>（轻量级）</li>
</ul>
<blockquote>
<p><strong>新手建议</strong>：先从<strong>官方服务端</strong>开始，熟悉后再尝试第三方服务端</p>
</blockquote>
<h2>第二步：首次启动服务器</h2>
<h3>1. 直接启动（最简单）</h3>
<ol>
<li>进入服务器文件夹 <code>D:\MC_Bedrock_Server</code></li>
<li>双击运行 <code>bedrock_server.exe</code></li>
<li>会弹出一个命令行窗口</li>
<li>等待看到类似这样的提示：<pre><code>Server started.
IPv4 supported, port: 19132
IPv6 supported, port: 19133
</code></pre>
</li>
<li>这说明服务器启动成功了！</li>
</ol>
<blockquote>
<p><strong>注意</strong>：首次启动会生成默认世界，可能需要几分钟时间</p>
</blockquote>
<h3>2. 创建快捷启动脚本（推荐）</h3>
<p>为了方便管理和添加参数，可以创建一个启动脚本：</p>
<ol>
<li>在服务器文件夹中右键 → 新建 → 文本文档</li>
<li>重命名为 <code>start.bat</code></li>
<li>右键用记事本打开，输入：</li>
</ol>
<pre><code>@echo off
title Minecraft Bedrock Server
echo 正在启动 Minecraft 基岩版服务器...
echo.
bedrock_server.exe
pause
</code></pre>
<ol>
<li>保存后，以后双击 <code>start.bat</code> 即可启动</li>
</ol>
<h3>3. 防火墙设置</h3>
<p>首次启动时，Windows 防火墙会弹出提示：</p>
<ol>
<li>会看到 "Windows 安全警报" 弹窗</li>
<li>勾选 <strong>"专用网络"</strong> 和 <strong>"公用网络"</strong></li>
<li>点击 <strong>"允许访问"</strong></li>
</ol>
<p>如果错过了弹窗，手动设置：</p>
<ol>
<li>控制面板 → Windows Defender 防火墙 → 高级设置</li>
<li>入站规则 → 新建规则</li>
<li>端口 → UDP → 特定本地端口：<code>19132,19133</code></li>
<li>允许连接</li>
<li>命名规则（如 "Minecraft Bedrock Server"）并保存</li>
</ol>
<blockquote>
<p><strong>重要</strong>：基岩版使用 <strong>UDP 协议</strong>，不是 TCP！</p>
</blockquote>
<h2>第三步：配置服务器</h2>
<h3>1. 编辑 server.properties</h3>
<p>关闭服务器（在命令行窗口按 <code>Ctrl + C</code>），然后用记事本打开 <code>server.properties</code> 文件。</p>
<p>以下是常用配置项及详细说明：</p>
<pre><code># ===== 基本设置 =====

# 服务器名称（会在服务器列表中显示）
server-name=Minecraft Bedrock Server

# 游戏模式：survival(生存), creative(创造), adventure(冒险)
gamemode=survival

# 难度：peaceful(和平), easy(简单), normal(普通), hard(困难)
difficulty=normal

# 是否允许作弊
allow-cheats=false

# 最大玩家数量
max-players=10

# 服务器端口（UDP）
server-port=19132

# IPv6 端口
server-portv6=19133

# 是否启用在线模式（正版验证）
online-mode=true

# 是否启用白名单
white-list=false

# 是否允许玩家伤害
player-damage=true

# 是否掉落物品
drop-items-on-death=true

# ===== 世界设置 =====

# 世界名称
level-name=Bedrock level

# 世界种子（留空则随机生成）
level-seed=

# 世界类型：default(默认), flat(超平坦), legacy(旧版)
level-type=default

# 默认玩家权限：member(成员), operator(管理员), visitor(访客)
default-player-permission-level=member

# 是否生成结构（村庄、要塞等）
generate-structures=true

# 是否生成_bonus_箱
bonus-chest-enabled=false

# 出生点保护半径（格）
spawn-protection=16

# ===== 性能设置 =====

# 视距（区块数量）
tick-distance=4

# 最大线程数（0 = 自动）
max-threads=8

# 是否启用教育版功能
education-feature-enabled=false

# ===== 其他设置 =====

# 服务器 MOTD（消息）
motd=A Minecraft Bedrock Server

# 是否发射器事件
emit-server-telemetry=true

# 内容日志文件级别
content-log-file-enabled=false

# 压缩阈值
compression-threshold=1

# 是否允许飞行
allow-flight=false

# 客户端刷新率
client-side-chunk-generation-enabled=true

# 加密设置
encryption-enabled=true

# 纹理包必填
texturepack-required=false

# 服务器作者
server-authoritative-movement=server-auth

# 修正玩家移动
correct-player-movement=true

# 服务器权威方块破坏
server-authoritative-block-breaking=true
</code></pre>
<h3>2. 重要配置详解</h3>
<h4>游戏模式</h4>
<pre><code># 生存模式（推荐）
gamemode=survival

# 创造模式
gamemode=creative

# 冒险模式（不能破坏方块）
gamemode=adventure
</code></pre>
<h4>玩家管理</h4>
<pre><code># 最大玩家数（根据网络带宽调整）
# 家庭局域网：10-20
# 外网服务器：5-10（取决于上传速度）
max-players=10

# 默认权限等级
# member = 普通玩家
# operator = 管理员（可使用命令）
# visitor = 访客（只能观看）
default-player-permission-level=member
</code></pre>
<h4>正版验证</h4>
<pre><code># true = 只允许微软正版账号加入（推荐）
# false = 允许离线账号（不推荐，有安全风险）
online-mode=true
</code></pre>
<h4>世界生成</h4>
<pre><code># 自定义种子
# 可以在网上找好看的种子，如：
level-seed=-1234567890

# 超平坦世界（适合创造建筑）
level-type=flat

# 视距设置（影响性能和视野）
# 低配电脑：2-3
# 中等配置：4-6
# 高配电脑：8-12
tick-distance=4
</code></pre>
<h4>飞行设置</h4>
<pre><code># 是否允许飞行
# survival 模式下通常关闭
# creative 模式下总是可以飞
allow-flight=false
</code></pre>
<h3>3. 保存并重启</h3>
<p>修改完配置后：</p>
<ol>
<li>保存文件（Ctrl + S）</li>
<li>重新启动服务器（双击 <code>start.bat</code> 或 <code>bedrock_server.exe</code>）</li>
<li>新配置生效</li>
</ol>
<h2>第四步：连接到服务器</h2>
<h3>本地连接（同一台电脑）</h3>
<ol>
<li>打开 Minecraft 基岩版客户端</li>
<li>点击"游玩" → "服务器"</li>
<li>滚动到底部，点击"添加服务器"</li>
<li>填写信息：
<ul>
<li><strong>服务器名称</strong>：随便填，如"我的服务器"</li>
<li><strong>服务器地址</strong>：<code>localhost</code> 或 <code>127.0.0.1</code></li>
<li><strong>端口</strong>：<code>19132</code>（如果没改过）</li>
</ul>
</li>
<li>点击"保存"</li>
<li>点击服务器名称加入</li>
</ol>
<h3>局域网连接（同一 WiFi 下的设备）</h3>
<p>基岩版的局域网连接非常简单！</p>
<h4>方法 A：自动发现（最简单）</h4>
<ol>
<li>确保所有设备连接到<strong>同一个 WiFi</strong></li>
<li>启动服务器</li>
<li>在手机/平板上打开 Minecraft</li>
<li>点击"游玩" → "好友"标签页</li>
<li>应该能看到你的服务器自动出现</li>
<li>直接点击加入</li>
</ol>
<h4>方法 B：手动添加</h4>
<p>如果自动发现不起作用：</p>
<ol>
<li>
<p><strong>查找电脑的局域网 IP</strong></p>
<ul>
<li>按 <code>Win + R</code>，输入 <code>cmd</code>，回车</li>
<li>输入 <code>ipconfig</code>，回车</li>
<li>找到 "IPv4 地址"，类似 <code>192.168.1.100</code></li>
</ul>
</li>
<li>
<p><strong>在其他设备上添加服务器</strong></p>
<ul>
<li>打开 Minecraft</li>
<li>游玩 → 服务器 → 添加服务器</li>
<li>服务器地址：<code>192.168.1.100</code></li>
<li>端口：<code>19132</code></li>
<li>保存并加入</li>
</ul>
</li>
</ol>
<blockquote>
<p><strong>提示</strong>：确保所有设备都登录了 Microsoft 账号</p>
</blockquote>
<h3>外网连接（让互联网上的朋友加入）</h3>
<h4>方法 A：路由器端口映射（需要公网 IP）</h4>
<ol>
<li>
<p><strong>确认有公网 IP</strong></p>
<ul>
<li>访问 <a href="https://ip.cn">https://ip.cn</a> 查看公网 IP</li>
<li>登录路由器查看 WAN 口 IP</li>
<li>如果相同则有公网 IP</li>
</ul>
</li>
<li>
<p><strong>登录路由器管理页面</strong></p>
<ul>
<li>浏览器输入 <code>192.168.1.1</code> 或 <code>192.168.0.1</code></li>
<li>输入管理员账号密码</li>
</ul>
</li>
<li>
<p><strong>设置端口映射</strong></p>
<ul>
<li>找到"端口映射"、"虚拟服务器"或"NAT"</li>
<li>添加规则：
<ul>
<li>外部端口：19132</li>
<li>内部端口：19132</li>
<li>内部 IP：你的电脑 IP</li>
<li>协议：<strong>UDP</strong>（重要！）</li>
</ul>
</li>
<li>同样添加 19133 端口（IPv6）</li>
<li>保存</li>
</ul>
</li>
<li>
<p><strong>告诉朋友你的公网 IP</strong></p>
<ul>
<li>他们添加服务器时输入：<code>你的公网IP:19132</code></li>
<li>例如：<code>123.45.67.89:19132</code></li>
</ul>
</li>
</ol>
<blockquote>
<p><strong>重要提醒</strong>：</p>
<ul>
<li>基岩版使用 <strong>UDP 协议</strong>，不是 TCP！</li>
<li>确保路由器映射的是 UDP 端口</li>
<li>公网 IP 可能会变化，考虑使用 DDNS</li>
</ul>
</blockquote>
<h4>方法 B：内网穿透工具</h4>
<p>如果没有公网 IP，使用内网穿透：</p>
<p><strong>推荐工具：</strong></p>
<ul>
<li><strong>SakuraFrp</strong>：<a href="https://www.natfrp.com/">https://www.natfrp.com/</a></li>
<li><strong>Ngrok</strong>：<a href="https://ngrok.com/">https://ngrok.com/</a></li>
<li><strong>ZeroTier</strong>：<a href="https://www.zerotier.com/">https://www.zerotier.com/</a>（组建虚拟局域网）</li>
</ul>
<p>以 SakuraFrp 为例：</p>
<ol>
<li>注册账号并下载客户端</li>
<li>创建隧道：
<ul>
<li>隧道类型：<strong>UDP</strong></li>
<li>本地 IP：127.0.0.1</li>
<li>本地端口：19132</li>
</ul>
</li>
<li>启动隧道，获得域名</li>
<li>朋友添加服务器时使用该域名</li>
</ol>
<p><strong>使用 ZeroTier（推荐小型团队）：</strong></p>
<ol>
<li>所有玩家安装 ZeroTier</li>
<li>创建网络，分享网络 ID</li>
<li>所有人加入网络</li>
<li>使用 ZeroTier 分配的虚拟 IP 连接</li>
<li>无需端口映射，安全方便</li>
</ol>
<h4>方法 C：使用 Realm（官方方案）</h4>
<p>如果觉得自建服务器太麻烦，可以考虑 Minecraft Realms：</p>
<ul>
<li><strong>优点</strong>：官方服务，稳定可靠，一键邀请好友</li>
<li><strong>缺点</strong>：需要付费订阅（约 $7.99/月）</li>
<li><strong>购买</strong>：在游戏内直接购买</li>
</ul>
<h2>第五步：服务器管理</h2>
<h3>常用控制台命令</h3>
<p>在服务器命令行窗口中可以直接输入命令：</p>
<pre><code># 查看帮助
help

# 停止服务器
stop

# 保存世界
save hold      # 暂停自动保存
save resume    # 恢复自动保存
save query     # 查询保存状态

# 给予玩家 OP 权限
op 玩家名

# 取消 OP 权限
deop 玩家名

# 封禁玩家
ban 玩家名

# 解封玩家
pardon 玩家名

# 查看在线玩家
list

# 更改游戏模式
gamemode survival 玩家名
gamemode creative 玩家名
gamemode adventure 玩家名

# 传送玩家
tp 玩家名1 玩家名2
tp 玩家名 x y z

# 广播消息
say 大家好，欢迎来到服务器！

# 设置出生点
setworldspawn
setworldspawn x y z

# 获取游戏规则列表
gamerule

# 设置是否掉落物品
gamerule keepinventory true

# 设置时间
time set day       # 白天
time set night     # 夜晚
time set noon      # 中午

# 设置天气
weather clear      # 晴天
weather rain       # 下雨
weather thunder    # 雷雨

# 改变难度
difficulty peaceful
difficulty easy
difficulty normal
difficulty hard

# 踢出玩家
kick 玩家名

# 查看服务器性能
tickingarea list
</code></pre>
<h3>管理玩家权限</h3>
<h4>1. 使用 OP 权限</h4>
<p>OP（Operator）拥有所有命令权限。</p>
<pre><code># 在控制台中
op Steve

# 在游戏中（需要已经是 OP）
/op Steve
</code></pre>
<p>OP 玩家可以：</p>
<ul>
<li>使用所有命令</li>
<li>不受出生点保护限制</li>
<li>在任何模式下飞行</li>
<li>破坏和放置任何方块</li>
</ul>
<h4>2. 使用白名单</h4>
<p>只允许特定玩家加入：</p>
<pre><code># 启用白名单
whitelist on

# 添加玩家（使用 Xbox Gamertag 或 Microsoft 账号名）
whitelist add Steve
whitelist add Alex

# 移除玩家
whitelist remove Steve

# 查看白名单列表
whitelist list

# 重新加载白名单
whitelist reload
</code></pre>
<p>也可以在 <code>server.properties</code> 中设置：</p>
<pre><code>white-list=true
</code></pre>
<p>然后在 <code>whitelist.json</code> 文件中手动添加玩家。</p>
<h4>3. 编辑 permissions.json</h4>
<p>基岩版有更细致的权限控制系统。</p>
<p>打开 <code>permissions.json</code> 文件：</p>
<pre><code>[
  {
    "permission": "operator",
    "xuid": "1234567890123456"
  },
  {
    "permission": "member",
    "xuid": "9876543210987654"
  }
]
</code></pre>
<p><strong>权限等级：</strong></p>
<ul>
<li><code>operator</code>：管理员，所有权限</li>
<li><code>member</code>：普通成员，基本权限</li>
<li><code>visitor</code>：访客，只能观看</li>
</ul>
<p><strong>获取玩家的 XUID：</strong></p>
<ul>
<li>玩家加入服务器后，在控制台会显示其 XUID</li>
<li>或使用在线工具查询</li>
</ul>
<h3>备份世界数据</h3>
<p>定期备份非常重要！</p>
<h4>手动备份</h4>
<ol>
<li>关闭服务器（输入 <code>stop</code>）</li>
<li>复制 <code>worlds</code> 文件夹</li>
<li>粘贴到其他位置作为备份</li>
<li>重新启动服务器</li>
</ol>
<h4>自动备份脚本</h4>
<p>创建 <code>backup.bat</code> 文件：</p>
<pre><code>@echo off
set backup_folder=D:\MC_Bedrock_Backup
set server_folder=D:\MC_Bedrock_Server
set date_str=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%
set date_str=%date_str: =0%

if not exist "%backup_folder%" mkdir "%backup_folder%"

echo 正在备份基岩版服务器...
xcopy "%server_folder%\worlds" "%backup_folder%\worlds_%date_str%" /E /I /Y

echo 备份完成！
pause
</code></pre>
<p>建议每周备份一次。</p>
<h2>第六步：跨平台联机说明</h2>
<p>基岩版的最大优势就是跨平台！以下是各平台的注意事项：</p>
<h3>Windows 10/11 PC</h3>
<ul>
<li>从 Microsoft Store 购买 Minecraft for Windows</li>
<li>确保登录 Microsoft 账号</li>
<li>与手机版完全兼容</li>
</ul>
<h3>手机/平板（iOS/Android）</h3>
<ul>
<li>从 App Store 或 Google Play 下载</li>
<li>需要付费购买（约 ¥68-89）</li>
<li>触摸操作，界面已优化</li>
<li>支持与 PC 完全互通</li>
</ul>
<h3>Xbox One/Series</h3>
<ul>
<li>需要 Xbox Live Gold 会员（联机必需）</li>
<li>使用手柄操作</li>
<li>完美支持跨平台</li>
</ul>
<h3>Nintendo Switch</h3>
<ul>
<li>需要 Nintendo Switch Online 会员</li>
<li>便携模式也可联机</li>
<li>性能略低于其他平台</li>
</ul>
<h3>PlayStation 4/5</h3>
<ul>
<li>需要 PlayStation Plus 会员</li>
<li>支持跨平台（需 Sony 账户链接 Microsoft 账户）</li>
</ul>
<blockquote>
<p><strong>提示</strong>：所有玩家都需要 <strong>Microsoft 账号</strong> 才能进行跨平台联机</p>
</blockquote>
<h2>第七步：优化服务器性能</h2>
<h3>1. server.properties 优化</h3>
<pre><code># 降低视距（最影响性能）
tick-distance=4

# 限制最大玩家数
max-players=10

# 减少线程数（根据 CPU 核心数调整）
max-threads=4

# 关闭不必要的功能
education-feature-enabled=false
content-log-file-enabled=false
</code></pre>
<h3>2. 系统优化</h3>
<p><strong>关闭不必要的后台程序：</strong></p>
<ul>
<li>浏览器、视频软件等占用资源的程序</li>
<li>确保服务器有足够的 CPU 和内存</li>
</ul>
<p><strong>设置优先级：</strong></p>
<ol>
<li>打开任务管理器（Ctrl + Shift + Esc）</li>
<li>找到 <code>bedrock_server.exe</code></li>
<li>右键 → 转到详细信息</li>
<li>右键进程 → 设置优先级 → 高</li>
</ol>
<p><strong>电源计划：</strong></p>
<ul>
<li>控制面板 → 电源选项</li>
<li>选择"高性能"模式</li>
</ul>
<h3>3. 网络优化</h3>
<p><strong>检查上传速度：</strong></p>
<ul>
<li>访问 <a href="https://speedtest.net">https://speedtest.net</a> 测试</li>
<li>基岩版每个玩家约需 0.1-0.5 Mbps 上传带宽</li>
<li>10 个玩家至少需要 5-10 Mbps 上传</li>
</ul>
<p><strong>使用有线网络：</strong></p>
<ul>
<li>尽量使用网线而非 WiFi</li>
<li>减少延迟和丢包</li>
</ul>
<p><strong>端口转发优化：</strong></p>
<ul>
<li>确保只开放必要的端口（19132 UDP）</li>
<li>不要在防火墙上开放额外端口</li>
</ul>
<h2>常见问题及解决</h2>
<h3>1. 服务器无法启动</h3>
<p><strong>问题</strong>：双击 <code>bedrock_server.exe</code> 后立即关闭</p>
<p><strong>解决</strong>：</p>
<ul>
<li>检查是否被杀毒软件拦截</li>
<li>将服务器文件夹添加到杀毒软件白名单</li>
<li>确保没有另一个服务器实例在运行</li>
<li>检查端口是否被占用</li>
</ul>
<h3>2. 朋友无法连接</h3>
<p><strong>问题</strong>：提示"无法连接到世界"或"连接超时"</p>
<p><strong>解决</strong>：</p>
<ul>
<li>确认服务器正在运行</li>
<li>检查 IP 地址和端口是否正确</li>
<li>确认防火墙已允许 UDP 19132 端口</li>
<li>局域网连接：确保在同一 WiFi 下</li>
<li>外网连接：确认端口映射正确（UDP！）</li>
</ul>
<p><strong>测试连接：</strong></p>
<pre><code># 在朋友的电脑上测试
# 打开命令提示符
ping 你的IP地址

# 测试端口（需要安装 telnet）
telnet 你的IP地址 19132
</code></pre>
<h3>3. 局域网自动发现不起作用</h3>
<p><strong>问题</strong>：手机上看不到服务器</p>
<p><strong>解决</strong>：</p>
<ul>
<li>确保所有设备在同一 WiFi 网络</li>
<li>检查路由器是否隔离了客户端（AP 隔离）</li>
<li>尝试手动添加服务器（使用 IP 地址）</li>
<li>重启路由器和所有设备</li>
<li>确保都登录了 Microsoft 账号</li>
</ul>
<h3>4. 服务器很卡/延迟高</h3>
<p><strong>问题</strong>：TPS 低，玩家卡顿</p>
<p><strong>解决</strong>：</p>
<ul>
<li>降低 <code>tick-distance</code>（视距）</li>
<li>减少最大玩家数</li>
<li>关闭服务器附近的红石装置</li>
<li>清理多余的实体（动物、怪物、掉落物）</li>
<li>检查网络上传速度</li>
<li>使用有线网络连接</li>
</ul>
<p><strong>清理实体命令：</strong></p>
<pre><code># 清除所有掉落物
kill @e[type=item]

# 清除经验球
kill @e[type=xp_orb]

# 清除特定范围的实体
kill @e[r=50,type=!player]
</code></pre>
<h3>5. 正版验证问题</h3>
<p><strong>问题</strong>：朋友无法加入，提示认证失败</p>
<p><strong>解决</strong>：</p>
<ul>
<li>确保所有玩家都有正版 Minecraft</li>
<li>确保都登录了 Microsoft 账号</li>
<li>如果都是离线玩家，设置 <code>online-mode=false</code></li>
<li>注意：离线模式存在安全风险，可能被任何人加入</li>
</ul>
<h3>6. 端口被占用</h3>
<p><strong>问题</strong>：提示端口已被使用</p>
<p><strong>解决</strong>：</p>
<ul>
<li>更改 <code>server.properties</code> 中的 <code>server-port</code></li>
<li>或找出占用端口的程序：<pre><code>netstat -ano | findstr :19132
taskkill /PID 进程ID /F
</code></pre>
</li>
</ul>
<h3>7. 世界损坏</h3>
<p><strong>问题</strong>：服务器启动时提示世界错误</p>
<p><strong>解决</strong>：</p>
<ul>
<li>从备份恢复</li>
<li>删除损坏的世界，生成新世界</li>
<li>使用第三方工具修复（如 Universal Minecraft Editor）</li>
</ul>
<h3>8. Xbox Live 连接问题</h3>
<p><strong>问题</strong>：提示 Xbox Live 服务不可用</p>
<p><strong>解决</strong>：</p>
<ul>
<li>检查 Xbox Live 服务状态：<a href="https://support.xbox.com/">https://support.xbox.com/</a></li>
<li>确保所有玩家都登录了 Microsoft 账号</li>
<li>重启游戏和服务器</li>
<li>检查网络连接</li>
</ul>
<h2>结语</h2>
<p>恭喜你！现在你已经成功搭建了自己的 Minecraft 基岩版服务器！</p>
<p><strong>总结一下关键步骤：</strong></p>
<ol>
<li>下载官方基岩版服务端</li>
<li>解压并首次启动</li>
<li>配置 <code>server.properties</code></li>
<li>设置防火墙（UDP 端口）</li>
<li>连接测试（本地/局域网/外网）</li>
<li>管理玩家和权限</li>
<li>定期备份和优化</li>
</ol>
<p><strong>基岩版的优势：</strong></p>
<ul>
<li><strong>跨平台联机</strong>：手机、PC、主机一起玩</li>
<li><strong>性能优秀</strong>：C++ 编写，资源占用少</li>
<li><strong>易于上手</strong>：配置简单，自动发现局域网</li>
<li><strong>移动友好</strong>：随时随地都能玩</li>
</ul>
<p><strong>接下来你可以：</strong></p>
<ul>
<li>邀请不同平台的朋友一起玩耍</li>
<li>探索基岩版特有的 Add-ons 和 Marketplace</li>
<li>学习更多基岩版命令和特性</li>
<li>尝试搭建小游戏地图</li>
<li>建立自己的跨平台社区</li>
</ul>
<p><strong>Java 版 vs 基岩版如何选择？</strong></p>
<ul>
<li>想要模组和技术玩法 → Java 版</li>
<li>想要跨平台和多设备 → 基岩版</li>
<li>小孩子或休闲玩家 → 基岩版</li>
<li>红石大神或建筑师 → Java 版</li>
<li>两者都可以试试，各有特色！</li>
</ul>
<p>如果在搭建过程中遇到问题，可以：</p>
<ul>
<li>查看服务器日志（控制台输出）</li>
<li>访问 Minecraft 官方论坛</li>
<li>加入基岩版玩家社区</li>
<li>在 Bilibili 搜索相关视频教程</li>
</ul>
<p>祝你在 Minecraft 的世界里玩得开心！无论使用什么设备，都能和朋友一起创造美好的回忆！</p>
<hr />
<p><strong>相关链接：</strong></p>
<ul>
<li>Minecraft 官网：<a href="https://www.minecraft.net/">https://www.minecraft.net/</a></li>
<li>基岩版服务端下载：<a href="https://www.minecraft.net/zh-hans/download/server/bedrock">https://www.minecraft.net/zh-hans/download/server/bedrock</a></li>
<li>Minecraft Wiki（基岩版）：<a href="https://minecraft.wiki/w/Bedrock_Edition">https://minecraft.wiki/w/Bedrock_Edition</a></li>
<li>Xbox 服务状态：<a href="https://support.xbox.com/">https://support.xbox.com/</a></li>
<li>PocketMine-MP：<a href="https://pmmp.io/">https://pmmp.io/</a></li>
<li>ZeroTier：<a href="https://www.zerotier.com/">https://www.zerotier.com/</a></li>
</ul>
]]></content>
    <author><name>蓝影Shadow</name></author>
    <category term="技术"/>
  </entry>
  <entry>
    <title>关于舞萌DX机台的技术分享</title>
    <link href="https://blog.yufurry.cn/posts/00000004/" rel="alternate" type="text/html"/>
    <id>https://blog.yufurry.cn/posts/00000004/</id>
    <published>2026-02-24T00:00:00.000Z</published>
    <updated>2026-04-07T00:00:00.000Z</updated>
    <summary>分享一些关于Maimai机台的问题</summary>
    <content type="html"><![CDATA[<h1>关于屏幕</h1>
<p><img src="/posts_img/2026/02/00000004/p-00000004-2.webp" alt="" /></p>
<p>有很多玩家会不理解，以为舞萌是上下两块屏幕组成的，但其实是有两块43寸竖直摆放的屏幕组成的，如图↑（by BV1kt4y1h7QW），具体这个屏幕是哪家的我也没查到具体的信息</p>
<h1>关于基板</h1>
<p>舞萌DX的基板使用的是ALLS HX2，配置如下&lt;br&gt;&lt;br&gt;</p>
<p>主板：技嘉 MCH31AM-S2 H310 芯片组</p>
<p>CPU：Intel Core i3-8100</p>
<p>内存：2x4GB</p>
<p>显卡：NVIDIA GeForce GTX 1050 Ti</p>
<p>系统：Windows 10 IoT LTSC 2019</p>
<p><img src="/posts_img/2026/02/00000004/p-00000004-3.webp" alt="" /></p>
<h1>关于按键</h1>
<p>很多人都以为舞萌的按键其实就是一个微动开关，但实际上不是的</p>
<p>舞萌的按键实际上是一个光电开关，按下按键后压缩弹片，弹片就会遮住红外传感器，完成触发。这样的优点是寿命长，响应速度快，价格低廉。其实不止舞萌是这样设计的，大多数街机类音游都采用这个方案设计</p>
<p><img src="/posts_img/2026/02/00000004/p-00000004-4.webp" alt="" /></p>
<h1>关于触摸</h1>
<p>舞萌的触摸屏本质上就是一个电容触摸屏，与手机上的电容触摸屏是一致的，但也有不同之处。</p>
<p>手机上的触摸屏是精准识别触摸位置的，而舞萌则是分为了34个触摸区块，无论摸到哪个区块的哪个位置都会触发对应的这个区块，就可以理解为34个触摸的开关，但触摸原理仍然是电容技术。</p>
<p><img src="/posts_img/2026/02/00000004/p-00000004-5.webp" alt="" />
<img src="/posts_img/2026/02/00000004/p-00000004-6.webp" alt="" /></p>
<p>这块触摸屏的制作工艺是磁控溅射，所以透光度是会有一定影响的，这也是为什么在表面看着屏幕会感觉有点发白的原因，但就因为这样也就能很好的隐藏掉内部的走线，正常角度去观察是看不到内部的区块走线的</p>
<p>整个触摸面板就是块玻璃，据我所知是5mm厚的稀土玻璃</p>
<p>但日框的maimai触摸面板材质似乎与国服不太一样，日框的屏幕具有一定延展性，并且与显示器的间距更小，这也是为什么日框的屏幕不用很大力的拍就会发白，通俗的来讲就是没有国框结实，但显示效果确实比国框好，也更不容易出现国框吃星星等这种问题</p>
<h1>按键优化</h1>
<p>关于按键方面的优化，首先肯定是要优先购买华立科技官方的按键，手感才能保证一致</p>
<p>对于长时间游玩的机台，按键的弹片难免会有些变形，导致手感出现"偏软"的问题，还可能因为长时间的击打导致按键壳出现裂痕甚至是按键壳卡扣断裂，这种情况会导致按键壳固定不牢，拍打时可能会发出异响，断裂后的卡扣甚至可能卡在按键内导致按键不回弹/按不下去。对于这种情况直接拆开按键更换按键壳即可，若弹片出现变形可稍微用力将弹片掰回来一些，但注意不要用力过度避免金属疲劳导致弹片断裂</p>
<h1>触摸屏优化</h1>
<p>对于舞萌触摸屏吃星星吃Touch的问题目前也没有很好的根治的办法，但大多数情况都是因为机台未良好接地，长时间未清灰，屏幕老化导致的。最常见的情况还是机台未接地，未接地就会导致机台内的设备产生共地干扰，使得触摸屏出现鬼跳/失灵/无法触发等问题，这种情况只需要确保机台接地良好即可。</p>
<p>至于网络上流传的"电压不稳导致的吃星星"我持保留态度，因为大多数时候小幅度的电压波动并不会影响触摸，并且现在大多数电玩城/商场都配备了工业级的滤波稳压模块，只有极少数场地会出现电压极度不稳的问题</p>
<p>若尝试了对机台进行接地，清灰等操作还是无法改善的话，可以尝试加一个rs232光电隔离器。在机台2p的位置打开背后的检修口拔掉基板上标有com3与com4的串口线路，这两根分别是1p和2p的触摸屏信号线，然后再采购两个"rs232光电隔离器"，先将隔离器插在基板上，再将串口线插到隔离器上。有概率能缓解吃星星的问题</p>
<p><img src="/posts_img/2026/02/00000004/p-00000004-7.webp" alt="" /></p>
]]></content>
    <author><name>蓝影Shadow</name></author>
    <category term="技术"/>
  </entry>
</feed>
