V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Ky2148
V2EX  ›  Python

请问各位佬们,如何更快抢 b 站的预售的东西?本人已做出只不过还是很慢.希望给出更多见解

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

    本人已用 Python 做出相应代码,但无论如何都抢不过别人,同步用的上海的阿里云和 b 站 ip 同步能达到 5ms 级别的.但逻辑代码没有问题,做了异步的操作.现在没有使用多线程.因为这个和抢购还有点区别.这个只是到点发售不限量.但是他前排的编号就这几个.所有就没做多线程,我现在不知道从哪里还能优化?我能想到的就是对应 b 站时间同步?但我找不到 b 站的 ntp.还有就是某人一直就能做到最前我也不知道他代码逻辑是什么.有没有前 b 站工作人员或者现阶段的解释一下,现在发放的这个逻辑是什么.为什么延迟做到如此低还抢不到.感谢佬们留帖回复

    8 条回复    2024-06-25 11:06:01 +08:00
    dongtingyue
        1
    dongtingyue  
       166 天前   ❤️ 1
    提前 100ms 发起多个并发试试
    Ky2148
        2
    Ky2148  
    OP
       166 天前 via Android
    因为和正常抢购不一样,并发如果都接受的话是每个都要花钱的。也可能我理解错误了?
    koast
        3
    koast  
       165 天前   ❤️ 1
    1. 别人跑代码的机房可能到 b 站服务器的延迟很低。
    2. 别人可能提前几百毫秒建立一个连接池,然后把抢购的请求的前 N-1 个字节都发送好了,在接下来几百毫秒里挨个把连接池里每一个连接的最后一个字节发送出去。


    另外,我没明白 2 楼是什么意思。意思是创建订单需要成功支付才算嘛?不是那种先创建订单,然后几分钟内付钱的类型嘛。你这个是抢 b 站的装扮我猜?要不怎么能知道别人抢到的序号。我没买过装扮,不知道具体过程是什么样的。
    Ky2148
        4
    Ky2148  
    OP
       165 天前 via Android
    1 的话我觉得我这个 5ms 我觉得应该很低了除非他是 b 站员工坐服务器旁边操作,2 的话请问怎么能做到每个连接最后一个字节发送过去。我没实操过不太懂这个原理,就是这个是有内置货币,的没有京东淘宝那种提交后生成订单。点击购买即代表购买成功。具体他给的序号的先后顺序还是怎么排列的原理不太懂,没看过源码也不太能理解。所以我现在最的最优解是多线程加异步来跑的,所以看看能不能请教一下 b 站的人看看具体原理逻辑是什么样子的
    koast
        5
    koast  
       165 天前   ❤️ 4
    举个例子

    比如 HTTP 报文如下

    ```
    GET /buy HTTP/1.1
    Host: www.example.com
    Cookies: xxxxxxxxxxxxxxx
    Content-length: 501

    \r\n\r\n

    yyyyyyyyyyyyyyyyyyyyyZ
    ```

    你完全可以手动开一堆 socket 连接服务器的 tcp 80 端口 然后正常发送报文头 然后服务器就知道你这个报文长度是 501 那如果你这时候只发送前 500 个 bytes 然后 flush 缓冲区会发生什么呢?服务器收到了这 500 个 bytes 但是不够 content-length 标明的 501 ,然后在不超时的时候这个报文就会在缓冲区里等待处理。那你开一堆这种没有完成的连接,在快到时间的时候每个只需要发送 1 个 byte 就能等回复了,是不是比别人握手建立连接 然后发报文头 再发 body 要快一点呢?
    Ky2148
        6
    Ky2148  
    OP
       165 天前 via Android
    好的,非常感谢提供思路。但我有个问题想求教一下,因为这个最后一个字节定时发布的话延迟问题怎么解决呢。就是这个方法可以放在循环里面?总觉得有延迟的东西就是一个闭环但感谢提供思路我去试一试
    Ky2148
        7
    Ky2148  
    OP
       165 天前 via Android
    大佬能留一个 tg 交流一下嘛
    godall
        8
    godall  
       161 天前
    抢购本身就有一定成功率的,别人也不一定成功啊,就像你京东抢茅台成功率 0.05%,用外挂成功率 1%高了很多,但是也是大部分不成功。要成功一定是多账号/多主机并发,单个的肯定不行。要么你 4 家运营商申请 4*5=20 个手机号同时抢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1555 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 17:05 · PVG 01:05 · LAX 09:05 · JFK 12:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.