美文网首页
一次go语言实现并发上传附件的功能的猜想

一次go语言实现并发上传附件的功能的猜想

作者: 江江简书 | 来源:发表于2020-03-15 16:53 被阅读0次

前言:最近在做一个php附件转移的功能,起初是通过php实现了,但是咧太浪费时间了如果我的附件有10万张,假设1张图片上传需要1秒,那么意味着要花费10万秒,那这个时间我是不能容忍的,因此想通过go语言协程来实现并发请求php开发的接口来实现并行转移附件,这样就可以大大减少附件上传的时间

首先你需要下载go语言模拟curl请求的包,

https://github.com/idoubi/goz

然后编写接口访问接口的go语言

package main
import (
    "fmt"
    "sync"
    "time"
    "github.com/idoubi/goz"
    "log"
)

func main() {
    wg := &sync.WaitGroup{}
    limiter := make(chan bool, 20)
    codedata := [...]string{"00001","00002","00003","00004"}
    for _,val := range codedata{
        wg.Add(1)
        limiter <- true
        go getApi(val,limiter,wg)
    }
    wg.Wait()
}
func getApi(idcode string, limiter chan bool, wg *sync.WaitGroup)  {
    defer wg.Done()
    cli := goz.NewClient()
    resp, err := cli.Get("xxxt?id="+idcode,goz.Options{
        Headers: map[string]interface{}{
            "User-Agent": "testing/1.0",
            "Accept":     "application/json",
            "X-Foo":      []string{"Bar", "Baz"},
        },
    })
    //resp, err := cli.Get("https://www.baidu.com/")
    if err != nil {
        log.Fatalln(err)
    }
    body,err1 := resp.GetBody()
    if err1 != nil{
        log.Fatalln(err)
    }
contents := body.GetContents()
fmt.Printf("value:%s,idcode:%v,time:%v\n",contents,idcode,time.Now().Unix())
    time.Sleep(1 * time.Second)
    <-limiter
}

结束:这期间用tp5.1访问时候会频繁的报错,后面换原生的方式开发接口,并且通过控制并发的数量从而实现对服务器减压,防止并发过大,

相关文章

  • 一次go语言实现并发上传附件的功能的猜想

    前言:最近在做一个php附件转移的功能,起初是通过php实现了,但是咧太浪费时间了如果我的附件有10万张,假设1张...

  • Go 并发原理

    Go语言是为并发而生的语言,Go语言是为数不多的在语言层面实现并发的语言;也正是Go语言的并发特性,吸引了全球无数...

  • GO语言初级学习之代码案例13 (QQ群聊)

    @(go语言 黑马)[GO语言] 并发聊天室 题目:利用Go语言高并发的特性,编写一个类似QQ群聊功能的并发聊天服...

  • 上传附件

    使用vant实现上传附件功能1.选择附件 2.上传附件到附件服务器 3.获取附件信息 上传附件一共需要三个步骤,首...

  • vue中实现附件上传

    前言 本篇主要记录在 Vue项目中 实现附件上传功能,可实现单/多附件上传,识别文件格式并用不同图标展示功能,及控...

  • go语言并发操作

    go语言实现并发 通过go 实现并发操作 执行上述代码,会间隔执行say方法 通过channel实现并发数据间的通...

  • Ext.NET 动态修改store参数失败, store和Gir

    概述 完整功能: 引入附件js文件后, 可以实现完整的附件功能. 这样每个需要附件上传区域的功能界面都可以传入一...

  • Go入门系列(九)并发

    目录一、goroutine二、channel Go语言的特色之一就是并发,Go 从语言层面就支持并发。同时实现了自...

  • bootstrap fileinput otherActionB

    最近处理bootstrap fileinput附件上传涉及附件下载问题,经过各种查询整合之后实现功能,整理文章免...

  • Go语言并发

    Go语言并发 Go语言级别支持协程,叫做goroutine Go 语言从语言层面支持并发和并行的开发操作 Go并发...

网友评论

      本文标题:一次go语言实现并发上传附件的功能的猜想

      本文链接:https://www.haomeiwen.com/subject/zdweehtx.html