V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
adolphlanglang
V2EX  ›  随想

菜*就不要打游戏好不好?

  •  
  •   adolphlanglang · 64 天前 · 3529 次点击
    这是一个创建于 64 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天打瓦被虐成狗了,我把原因归到了网络波动上(就是不承认菜,不过网络质量确实不好,根本就是不能玩的程度),然后写了下面这个脚本简单测试下网络质量,大家看谁网络质量比较好测试一下。

    下面是一组比较夸张的数据,但是游戏中也会出现。

    21:32:18 样本数量: 60 | 平均: 111.24ms | 抖动: 55.75ms | 抖动率: 50.12%
    21:32:20 样本数量: 60 | 平均: 112.78ms | 抖动: 55.60ms | 抖动率: 49.30%
    21:32:22 样本数量: 60 | 平均: 115.65ms | 抖动: 55.04ms | 抖动率: 47.59%
    21:32:23 样本数量: 60 | 平均: 117.59ms | 抖动: 60.08ms | 抖动率: 51.09%
    21:32:25 样本数量: 60 | 平均: 115.69ms | 抖动: 56.60ms | 抖动率: 48.93%
    21:32:26 样本数量: 60 | 平均: 119.04ms | 抖动: 57.91ms | 抖动率: 48.65%
    21:32:27 样本数量: 60 | 平均: 118.50ms | 抖动: 58.77ms | 抖动率: 49.60%
    21:32:28 样本数量: 60 | 平均: 115.43ms | 抖动: 58.23ms | 抖动率: 50.44%
    21:32:29 样本数量: 60 | 平均: 111.57ms | 抖动: 54.64ms | 抖动率: 48.97%
    
    import configparser
    import subprocess
    import time
    import re
    from collections import deque
    import numpy as np
    import os
    
    CONFIG_FILE = 'config.ini'
    
    def create_default_config(path):
        config = configparser.ConfigParser()
        config['monitor'] = {
            'host': 'baidu.com',
            'window_size': '60',
            'ping_interval': '1',
            'trim_percent': '0.05'
        }
        config['output'] = {
            'show_timestamp': 'true',
            'log_to_file': 'false',
            'log_file': 'jitter_log.txt'
        }
        with open(path, 'w') as configfile:
            config.write(configfile)
        print(f"[首次运行] 配置文件 '{path}' 已生成,使用默认配置。")
    
    def load_config(file):
        if not os.path.exists(file):
            create_default_config(file)
    
        config = configparser.ConfigParser()
        config.read(file)
        return {
            'host': config.get('monitor', 'host'),
            'window_size': config.getint('monitor', 'window_size'),
            'ping_interval': config.getfloat('monitor', 'ping_interval'),
            'trim_percent': config.getfloat('monitor', 'trim_percent'),
            'show_timestamp': config.getboolean('output', 'show_timestamp'),
            'log_to_file': config.getboolean('output', 'log_to_file'),
            'log_file': config.get('output', 'log_file')
        }
    
    def ping_once(host):
        try:
            output = subprocess.check_output(
                ["ping", host, "-n", "1"],
                stderr=subprocess.STDOUT,
                universal_newlines=True
            )
            match = re.search(r'(?:时间|time)[=<]?\s*(\d+)\s*ms', output, re.IGNORECASE)
            if match:
                return int(match.group(1))
        except subprocess.CalledProcessError:
            pass
        return None
    
    def calculate_jitter_rate(delays, trim_percent=0.05):
        if len(delays) < 4:
            return None
        arr = np.array(delays)
        lower = np.percentile(arr, trim_percent * 100)
        upper = np.percentile(arr, (1 - trim_percent) * 100)
        trimmed = arr[(arr >= lower) & (arr <= upper)]
        if len(trimmed) < 2:
            return None
        avg_delay = np.mean(trimmed)
        diffs = np.abs(np.diff(trimmed))
        avg_jitter = np.mean(diffs)
        jitter_rate = (avg_jitter / avg_delay) * 100 if avg_delay != 0 else 0
        return avg_delay, avg_jitter, jitter_rate
    
    def live_ping_jitter(config):
        delays = deque(maxlen=config['window_size'])
        while True:
            delay = ping_once(config['host'])
            timestamp = time.strftime('%H:%M:%S') if config['show_timestamp'] else ''
            if delay is not None:
                delays.append(delay)
                result = calculate_jitter_rate(list(delays), config['trim_percent'])
                if result:
                    avg_delay, avg_jitter, jitter_rate = result
                    line = f"{timestamp} 样本数量: {len(delays):2d} | 平均: {avg_delay:.2f}ms | 抖动: {avg_jitter:.2f}ms | 抖动率: {jitter_rate:.2f}%"
                else:
                    line = f"{timestamp} 收集中... 样本数量: {len(delays)}"
            else:
                line = f"{timestamp} 丢包"
    
            print(line)
            if config['log_to_file']:
                with open(config['log_file'], 'a', encoding='utf-8') as f:
                    f.write(line + '\n')
    
            time.sleep(config['ping_interval'])
    
    if __name__ == "__main__":
        config = load_config('config.ini')
        live_ping_jitter(config)
    
    20 条回复    2025-05-08 09:48:04 +08:00
    zhlxsh
        1
    zhlxsh  
       64 天前 via iPhone
    之前看到有些地区百度都🈲️ping 了
    Hayashikawa
        2
    Hayashikawa  
       64 天前 via iPhone
    菜*就不要打游戏好不好?
    EndlessMemory
        3
    EndlessMemory  
       64 天前
    什么运营商
    Yuanlaoer
        4
    Yuanlaoer  
       64 天前
    团队游戏跟路人就是毒性很大。当年顶着 200 左右的 PING 也可以打 WAR3 战网。
    Paradox4068
        5
    Paradox4068  
       64 天前
    我不敢玩团队游戏,就是怕有人压力我
    comexb
        6
    comexb  
       64 天前 via iPhone
    建议你把电脑 网络 外设 心态调整好再去打 这样就可以确定 你的确是菜🐶了😂
    我 cs 玩了 2 千个小时 还是白银 一直冲锋枪 rush 游戏吗 娱乐就行了
    wolfie
        7
    wolfie  
       64 天前
    @Yuanlaoer
    记得当年 11 平台显示 玩家延迟,延迟高的直接踢,浩方忘记是否显示。
    xzaf
        8
    xzaf  
       64 天前   ❤️ 1
    作为手残菜 X ,已经发誓不玩团队游戏。最多自己默默人机。
    Yuanlaoer
        9
    Yuanlaoer  
       63 天前
    @wolfie 嗯,对战平台是有这个功能的。
    我指的是对战,不是 dota 。纯粹 ping 高不会影响对手,除非是 ping 高 + 不稳定/丢包,才会也影响对手体验。
    adolphlanglang
        10
    adolphlanglang  
    OP
       63 天前
    @Hayashikawa 哈哈,我是自嘲的,网络正常点还是挺好玩的
    adolphlanglang
        11
    adolphlanglang  
    OP
       63 天前
    @Yuanlaoer 只要稳定其实还好,游戏内偶尔出现几百上千的延时会很烦躁
    adolphlanglang
        12
    adolphlanglang  
    OP
       63 天前
    @comexb 十分确定就是菜🐶 不过不耽误玩😂
    adolphlanglang
        13
    adolphlanglang  
    OP
       63 天前
    @zhlxsh 大概看一下随便找个主机就行,只是 ping 得时候会习惯的用百度
    z919126592
        14
    z919126592  
       63 天前
    瓦在出新的这几个 mix 服务器之前,我这边联通移动玩固定丢包 10% 左右…当时还以为是性能或者本地网络问题,测试之后发现我这边啥问题没有换了个网就好了
    Yuanlaoer
        15
    Yuanlaoer  
       62 天前
    @adolphlanglang 嗯,你这种情况,会烦躁太正常了。不过,偶尔跳 PING 不是正常现象啊,是服务器的问题还是你自己网络问题呀?
    momoguo
        16
    momoguo  
       62 天前 via Android
    手残党 大概永远都无法 pvp 了
    xubingok
        17
    xubingok  
       61 天前
    没关系,可以花钱找人带你啊.

    dota 打了十几年了,操作已经跟不上了,现在找主播带,想躺平就躺平,想拼一把就拼一把,最后还能赢.情绪价值和游戏体验都给得满满的.
    LaGeNanRen
        18
    LaGeNanRen  
       61 天前
    国内瓦刚出的时候,我发现一直有几十的丢包,说实话作为国内 top0 的游戏厂商,这个国服服务器表现我觉得不可能,但无论在家里还是网吧都是丢包。。。后来发现挂个 uu 加速器加速国服无畏契约,就 0 丢包了。不知道为啥。。。
    layxy
        19
    layxy  
       61 天前
    我就是又菜又爱玩,毕竟我电脑换了,显示器换了,键盘换了,鼠标换了,网络换了,甚至电脑桌也换了,没有其他原因了啊
    Danswerme
        20
    Danswerme  
       59 天前
    菜更要多玩,玩多了就能成为菜鸟中的老手了
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2624 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 09:01 · PVG 17:01 · LAX 02:01 · JFK 05:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.