V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
hackingwu
V2EX  ›  程序员

关于如何优化外部请求的问题?

  •  
  •   hackingwu ·
    hackingwu · 2015-08-25 08:06:56 +08:00 · 2604 次点击
    这是一个创建于 3413 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我目前在做一个发送验证码的功能,每一次发送验证码都要去发送外部请求。我目前的是用一个线程去消费队列。当我我模拟并发,发现效率很差。差不多从队列中消费一个验证码请求需要 300ms ,而这个时间大部分都花费在了发送 http 的外部请求上了。那么我在不增加消费线程的情况下,要如何优化?这里我不知道 300ms 是主要花了在建立 http 资源请求,还是传输链路开销。我觉得主要是在 http 资源请求?是否有什么缓存,或者请求池,能够解决这个问题?谢谢!

    11 条回复    2015-08-28 16:55:14 +08:00
    dingyaguang117
        1
    dingyaguang117  
       2015-08-25 08:21:51 +08:00
    加 DNS cache
    dingyaguang117
        2
    dingyaguang117  
       2015-08-25 08:23:03 +08:00
    另外你说的很对,你这种没什么数据传输,主要是在 DNS 解析和连接建立上。如果对方支持 keepalive 可以考虑弄个连接池
    kslr
        3
    kslr  
       2015-08-25 08:45:30 +08:00
    一个简单验证码性缓存下都很不错了,为什么还要加上这些队列什么的。
    ljbha007
        4
    ljbha007  
       2015-08-25 09:12:00 +08:00
    1. 没必要用队列
    2. 请求是请求验证码的图片吗?那可以直接把图片的地址放在前端啊
    hackingwu
        5
    hackingwu  
    OP
       2015-08-25 09:41:55 +08:00
    @ljbha007 短信验证码啊,,,,
    ljbha007
        6
    ljbha007  
       2015-08-25 10:49:10 +08:00 via Android
    @hackingwu
    原来是这样
    1 、不必等 http 请求成功完成再返回 可以直接放另一个线程里让那个线程慢慢去发 接口先返回响应让前端先展示出来 这样不影响用户体验
    2 、前面提到的 DNS 缓存、长连接也都可以节省请求时间
    ljbha007
        7
    ljbha007  
       2015-08-25 10:52:05 +08:00 via Android
    还有根据不同的语言和框架也有一些优化
    比如说 java 的 nio 可以有效减少 CPU 时间在等待 IO 上的浪费
    还有 nodejs tornado 也是一样的道理
    ryd994
        8
    ryd994  
       2015-08-25 11:00:30 +08:00 via Android
    用 urllib3 ,带连接池
    aisk
        9
    aisk  
       2015-08-25 13:56:28 +08:00
    楼上说的都治标不治本,物理限制在那摆着呢。
    invite
        10
    invite  
       2015-08-25 19:35:55 +08:00
    短信验证码? 那你这 300ms 的延时完全没问题, 主要延时在手机端接受密码上.
    s7lx
        11
    s7lx  
       2015-08-28 16:55:14 +08:00
    @invite 人家这个肯定是发给短信网关的。
    @hackingwu 建一个发送队列然后让单一的发送线程去发,业务逻辑只要往队列里丢就可以了(缺点是网络拥塞的时候延迟就很大了)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2803 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 03:44 · PVG 11:44 · LAX 19:44 · JFK 22:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.