Advertisement
Guest User

Untitled

a guest
Mar 10th, 2020
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.81 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "bufio"
  5.     "fmt"
  6.     "github.com/gammazero/workerpool"
  7.     "log"
  8.     "os"
  9.     "time"
  10. )
  11.  
  12. type PingRestult struct {
  13.     ip   string
  14.     time time.Duration
  15. }
  16.  
  17. func IpGen(urls []string) chan string {
  18.     ch := make(chan string)
  19.     go func() {
  20.         for {
  21.             for _, url := range urls {
  22.                 ch <- url
  23.             }
  24.         }
  25.     }()
  26.     return ch
  27. }
  28.  
  29. func PingIp(ip string) {
  30.     //pinger, err := ping.NewPinger(ip)
  31.     //pinger.SetPrivileged(true)
  32.     //if err != nil {
  33.     //  panic(err)
  34.     //}
  35.     //pinger.Count = 1
  36.     //pinger.Timeout = time.Millisecond * 200
  37.     //
  38.     //pinger.Run()
  39.     //// blocks until finished
  40.     //stats := pinger.Statistics()
  41.     //result := PingRestult{ip, stats.AvgRtt}
  42.     fmt.Println(ip)
  43. }
  44.  
  45. func suck(ch chan string) {
  46.     //go func() {
  47.     //  for v := range ch {
  48.     //      PingIp(v)
  49.     //  }
  50.     //}()
  51.  
  52.     wp := workerpool.New(1000)
  53.  
  54.     for url := range ch {
  55.         wp.Submit(func() {
  56.             PingIp(url)
  57.         })
  58.     }
  59.  
  60.     wp.StopWait()
  61.  
  62. }
  63.  
  64. func main() {
  65.     file, err := os.Open("file.txt")
  66.     if err != nil {
  67.         log.Fatal(err)
  68.     }
  69.     defer file.Close()
  70.  
  71.     var lines []string
  72.     scanner := bufio.NewScanner(file)
  73.     for scanner.Scan() {
  74.         lines = append(lines, scanner.Text())
  75.     }
  76.  
  77.     if err := scanner.Err(); err != nil {
  78.         log.Fatal(err)
  79.     }
  80.  
  81.     ipChan := make(chan string)
  82.     defer close(ipChan)
  83.  
  84.     //启动100个gorontine 作为worker进行计算 ping 结果
  85.     //for i := 0; i <= 100; i++ {
  86.     //  go func() {
  87.     //      for {
  88.     //          url := <-ipChan
  89.     //          PingIp(url)
  90.     //      }
  91.     //  }()
  92.     //}
  93.  
  94.     //http://jmoiron.net/blog/limiting-concurrency-in-go/
  95.     //concurrency := 100
  96.     //sem := make(chan bool, concurrency)
  97.     //for url := range ipChan {
  98.     //  sem <- true
  99.     //  go func() {
  100.     //      defer func() { <-sem }()
  101.     //      PingIp(url)
  102.     //  }()
  103.     //}
  104.     //for i := 0; i < cap(sem); i++ {
  105.     //  sem <- true
  106.     //}
  107.  
  108.     resultch := IpGen(lines)
  109.     suck(resultch)
  110.  
  111.     select {}
  112.  
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement