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

PHP 使用 curl 下载微信服务器端图片使用人数一多的时候性能优化问题?

  •  
  •   king2014 · 2017-06-15 13:15:45 +08:00 · 2067 次点击
    这是一个创建于 2708 天前的主题,其中的信息可能已经有所发展或是发生改变。

    利用微信的 jssdk 调用手机相机拍照上传,图片是保存在微信服务器上的且只能保存三天,所以需要通过微信提供的接口把微信服务器上的图片下载到自己的服务器.要用到 curl,问题是当使用的人很少的时候没问题,但是人一多就出现卡死的情况.报名的时候每个人都要上传 4 张图片,最后提交的时候同事把图片 curl 到本地.cuel 方面已经使用了 curl_multi 改进过的 rolling_curl,但是效果不是很好,有没有什么好的方向建议?

    第 1 条附言  ·  2017-06-15 15:58:16 +08:00
    -------------------------------分割线------------------------------------
    1.前端页面是一个举报平台,至于为什么要用到微信的接口是因为只点击上传图片只能调用手机相机拍照而不能从文件选取图片上传,至于为什么这么奇葩的需求,我也没办法,对方必须要这样
    2.感谢回答的人,提出先用微信的图片链接放着,下载图片的时候不用即时去做,但是据我所知微信返回的地址形式是这样的:weixin://resourceid/5585316 只能在微信上可以看,但是我们 pc 端有个后台,不定时的需要人工审核那些举报的信息
    3.或者 pc 后台设置一个下载的路口当你看的时候才下载下来.同时开一个自动任务,检查 3 天内还没有下载到本地的在深夜自己下载下来
    18 条回复    2017-06-15 16:20:07 +08:00
    jswh
        1
    jswh  
       2017-06-15 13:29:07 +08:00
    一开始的时候可以使用微信的地址。图片抓取任务不用实时做,放到队列里做。抓取之后把微信地址替换为本地地址。
    loadinger
        2
    loadinger  
       2017-06-15 13:37:55 +08:00
    有个东西叫 mq.
    juneszh
        3
    juneszh  
       2017-06-15 13:42:26 +08:00
    最省成本的操作就是把并发改成队列。另外业务逻辑不能优化?为什么一上传就要去下载?微信的链接都可以用 3 天
    BOYPT
        4
    BOYPT  
       2017-06-15 13:45:18 +08:00
    上 CDN 吧。七牛可以远程下载微信的图,我们项目用七牛存用户的头像。
    2ME
        5
    2ME  
       2017-06-15 13:54:51 +08:00
    队列 或者写个定时任务每次执行扫一遍微信的图片地址抓取下来执行 UPDATE
    king2014
        6
    king2014  
    OP
       2017-06-15 15:31:34 +08:00
    @juneszh 一上传就下载是因为有一个在 pc 端的后台,有人实时审核的.微信的图片链接是 wx:XXXX 只能在微信上显示,而且苹果和安卓图片链接形式还不是一样的.
    king2014
        7
    king2014  
    OP
       2017-06-15 15:32:00 +08:00
    @jswh 后台在 pc 端,用微信地址没办法显示出来
    king2014
        8
    king2014  
    OP
       2017-06-15 15:32:54 +08:00
    @2ME 有想过,但是这边需要实时可以查看到图片,微信 jssdk 上传到微信服务器的图片地址只能在微信上预览,没办法在 pc 端预览
    king2014
        9
    king2014  
    OP
       2017-06-15 15:33:12 +08:00
    @loadinger 我去看看 mq 是什么
    juneszh
        10
    juneszh  
       2017-06-15 15:48:32 +08:00
    @king2014 #6 不是很理解,如果只是后台审核用,直接用你 curl 下载的图片地址作为显示不就可以了?<image src="http://file.api.weixin.qq.com/cgi-bin/media/get?access_token={$token}&media_id={$media}" />
    jarlyyn
        11
    jarlyyn  
       2017-06-15 15:50:39 +08:00
    这么复杂为什么不直接 PO 到服务器上……
    juneszh
        12
    juneszh  
       2017-06-15 15:53:40 +08:00
    你都能 curl 下载到图了,为什么会有 PC 端不能显示的道理?
    king2014
        13
    king2014  
    OP
       2017-06-15 15:59:49 +08:00
    @juneszh token 有时间现在 7200 秒就会更新掉的,而且 media_id 保存的图片只有三天.所以这样应该只能实现短时间查看
    king2014
        14
    king2014  
    OP
       2017-06-15 16:01:08 +08:00
    @juneszh 可以显示.我问的是 curl 在很多人一起的时候,会导致系统阻塞.我问了有没有办法优化下性能可以应付多并发的 curl
    juneszh
        15
    juneszh  
       2017-06-15 16:03:33 +08:00
    @king2014 #13 只要你不把地址写死,7200 秒完全没有什么影响。3 天时间足够你避开高峰期慢慢在后台安排去下载
    king2014
        16
    king2014  
    OP
       2017-06-15 16:03:34 +08:00
    @jarlyyn 一个小项目.逻辑不复杂,微信那边端口也写的很清楚,只不过调用上传接口我们这边下载到自己的服务器.现在问题同时使用人一上来就会很卡
    king2014
        17
    king2014  
    OP
       2017-06-15 16:05:17 +08:00
    @juneszh 有道理,我去实现看看.谢谢你
    jarlyyn
        18
    jarlyyn  
       2017-06-15 16:20:07 +08:00
    @king2014
    1.token 进缓存啊……
    2.要并发么做队列。
    3.除非带宽有问题,完全可以 canvas.js 调整图片后,PO 一个 base64 过来啊……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3623 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 04:32 · PVG 12:32 · LAX 20:32 · JFK 23:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.