You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化C#程序HTTP请求发送速度 降低Minecraft抢名请求耗时

Minecraft名称抢注工具请求提速方案

你当前代码请求间隔过大的核心原因是发送逻辑完全串行:循环内使用await等待上一个请求完整返回响应后,才会发起下一个请求,从测试结果看首次请求后间隔达到数百毫秒,完全没有利用并发能力。

具体优化手段

  • 解除串行等待,实现请求流水线发送
    发送循环内不要await请求任务,发起请求后立刻进入下一轮循环发送新请求,响应处理逻辑异步执行即可,不要阻塞发送流程。注意不要在发送路径上放置控制台同步输出、响应内容读取等耗时操作。
  • 放开HttpClient内置连接限制
    .NET运行时默认对单域名的并发TCP连接数限制为2,必须手动放开:
    • 初始化HttpClient前将ServicePointManager.DefaultConnectionLimit设置为50~100,或者使用SocketsHttpHandler初始化HttpClient,直接设置MaxConnectionsPerServer属性为目标并发值
    • 关闭默认代理自动探测:初始化Handler时将UseProxy设为false,避免系统代理检测带来的数百毫秒额外延迟
    • 开启HTTP长连接复用,设置request.Headers.ConnectionClose = false,复用已建立的TCP连接
  • 提前预热连接,消除握手开销
    首次请求到Mojang接口需要完成TCP三次握手、TLS协商,会产生数百毫秒冷启动延迟。在抢注时间点到达前10~30秒,提前向目标接口发起数个预热请求,将长连接预建到连接池内,到点直接复用连接发送请求即可。
  • 优化等待逻辑精度
    你当前使用的Thread.Sleep默认在Windows上只有15.6ms的时钟精度,很容易出现时间偏移。可以在等待阶段先使用Sleep等待到距目标时间差10~20ms的节点,再用高精度自旋等待卡准发送时间点,避免触发时机偏移。
  • 分离发送与响应处理流程
    所有发出去的请求任务统一存入一个并发集合,单独开一个后台异步任务轮询集合内的任务状态,收到响应后再输出状态码、判断是否抢注成功,彻底避免响应处理阻塞发送流程。

核心优化代码示例

// 初始化HttpClient时提前放开限制
public static Client InitClient()
{
    var handler = new SocketsHttpHandler()
    {
        MaxConnectionsPerServer = 50,
        UseProxy = false,
        PooledConnectionLifetime = TimeSpan.FromMinutes(5)
    };
    return new Client(handler);
}

// 主逻辑部分修改
var sendTasks = new List<Task>();
var client = InitClient();
// 提前预热连接
for(int i=0;i<3;i++) _ = client.Put(name);
Thread.Sleep(droptime - offset - 20);
// 最后20ms自旋等待卡准时间
var targetTime = epoch - offset;
while(DateTimeOffset.Now.ToUnixTimeMilliseconds() < targetTime) { }
// 开始并发发送
while (true)
{
    var sent = DateTimeOffset.Now.ToUnixTimeMilliseconds();
    // 不await,把任务丢出去直接发下一个
    var task = client.Put(name);
    sendTasks.Add(task);
    Console.Write($"  Sent:  + {sent}");
    // 控制发送速率避免被限流
    Thread.SpinWait(1000);
}

// 单独开后台任务处理响应
_ = Task.Run(async () =>
{
    while(true)
    {
        var completed = sendTasks.Where(t => t.IsCompleted).ToList();
        foreach(var t in completed)
        {
            sendTasks.Remove(t);
            // 处理响应结果,判断是否抢注成功
        }
        await Task.Delay(10);
    }
});

注意:不要无限制拉高并发,过高的请求频率会触发Mojang API的限流规则导致IP被临时封禁,建议将并发控制在10~30区间即可。


内容的提问来源于stack exchange,提问作者hud Kad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 02:51:21