zoukankan      html  css  js  c++  java
  • go语言中如何模拟100个IP同时并发访问服务器,每个ip要重复访问1000次。每个Ip一分钟之内只能访问一次

    package  main
    
    import (
        "time"
        "sync"
        "fmt"
        "sync/atomic"
    )
    
    type  Ban struct {
        visitIPs  map[string]struct{}  //这个是什么意思
    }
    
    func NewBan() *Ban{
        return &Ban{visitIPs:make(map[string]struct{})}
    }
    //判断ip是否存在
    func (o *Ban) visit(ip string)bool{
        mapMutex.Lock()
        defer mapMutex.Unlock()
        if _, ok :=o.visitIPs[ip];ok{
            return true
        }
        o.visitIPs[ip]= struct{}{}
        go o.invalidAfter1Min(ip)
        return  false
    }
    func (o *Ban) invalidAfter1Min(ip string){
        time.Sleep(time.Minute *1)
        mapMutex.Lock()
        visitIPs :=o.visitIPs
        delete(visitIPs,ip)
        o.visitIPs=visitIPs
        mapMutex.Unlock()
    }
    var mapMutex *sync.Mutex   //声明锁
    
    func main(){
        mapMutex =new(sync.Mutex)  //创建一个锁
        var success int64    //声明
        ban :=NewBan()
        wg :=new(sync.WaitGroup)
        for i :=0;i<1000;i++{
            for j :=0;j<1000;j++{
                wg.Add(1)
                //fmt.Println('j',j)
                fmt.Println(j)
                ipEnd :=j
                go func() {
                    defer  wg.Done()
                    ip :=fmt.Sprintf("192.168.1.%d",ipEnd)
                    //fmt.Println(ipEnd)
                    if !ban.visit(ip){
                        atomic.AddInt64(&success,1)
                    }
                }()
            }
        }
        wg.Wait()
        fmt.Println("success:",success)
    
    
    }
  • 相关阅读:
    Web.xml中Filter过滤器标签几个说明
    JVM参数配置大全
    Java时间日期格式转换
    第一天用博客园
    Java基础--序列化和反序列化
    Java面试题2017
    固定布局,流动布局,弹性布局
    viewport
    索引
    Java虚拟机
  • 原文地址:https://www.cnblogs.com/1a2a/p/9144913.html
Copyright © 2011-2022 走看看