Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "bufio"
- "fmt"
- "github.com/gammazero/workerpool"
- "log"
- "os"
- "time"
- )
- type PingRestult struct {
- ip string
- time time.Duration
- }
- func IpGen(urls []string) chan string {
- ch := make(chan string)
- go func() {
- for {
- for _, url := range urls {
- ch <- url
- }
- }
- }()
- return ch
- }
- func PingIp(ip string) {
- //pinger, err := ping.NewPinger(ip)
- //pinger.SetPrivileged(true)
- //if err != nil {
- // panic(err)
- //}
- //pinger.Count = 1
- //pinger.Timeout = time.Millisecond * 200
- //
- //pinger.Run()
- //// blocks until finished
- //stats := pinger.Statistics()
- //result := PingRestult{ip, stats.AvgRtt}
- fmt.Println(ip)
- }
- func suck(ch chan string) {
- //go func() {
- // for v := range ch {
- // PingIp(v)
- // }
- //}()
- wp := workerpool.New(1000)
- for url := range ch {
- wp.Submit(func() {
- PingIp(url)
- })
- }
- wp.StopWait()
- }
- func main() {
- file, err := os.Open("file.txt")
- if err != nil {
- log.Fatal(err)
- }
- defer file.Close()
- var lines []string
- scanner := bufio.NewScanner(file)
- for scanner.Scan() {
- lines = append(lines, scanner.Text())
- }
- if err := scanner.Err(); err != nil {
- log.Fatal(err)
- }
- ipChan := make(chan string)
- defer close(ipChan)
- //启动100个gorontine 作为worker进行计算 ping 结果
- //for i := 0; i <= 100; i++ {
- // go func() {
- // for {
- // url := <-ipChan
- // PingIp(url)
- // }
- // }()
- //}
- //http://jmoiron.net/blog/limiting-concurrency-in-go/
- //concurrency := 100
- //sem := make(chan bool, concurrency)
- //for url := range ipChan {
- // sem <- true
- // go func() {
- // defer func() { <-sem }()
- // PingIp(url)
- // }()
- //}
- //for i := 0; i < cap(sem); i++ {
- // sem <- true
- //}
- resultch := IpGen(lines)
- suck(resultch)
- select {}
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement