Code Monkey home page Code Monkey logo

go-ip2region's Introduction

👨🏼‍💻 Dexter Ho(ZhiZheng He)

👋 Hi, I'm Dexter Ho(ZhiZheng He),a backend developer from China.

DexterHo's github stats

About

  • Learning : Full-Stack Development ⚡ | Open-Source 🔥
  • Languages : PHP, Go, JavaScript
  • Hobbies : Travel: 🧳 & Music: 🎵 Cantopop & language: 📢 Cantonese
  • Contact me : Twitter Instagram Weibo

Languages and Tools

I love to make friends. so if you want to say hi, I'll be happy to meet you more! 😊

go-ip2region's People

Contributors

hezhizheng avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

go-ip2region's Issues

> > 1、前端支持多个IP....可以无上限。 2、利用GO语言对前端请求的多个IP进行并行查询,节省查询时间。 3、支持更新数据库,目前是首次运行会下载最新数据库,但是服务器部署后,需要命令行支持更新数据库。 比如`./goip2region update`

1、支持多个IP已在此项目基础上实现,同时用docker构建使用, 2、增加编码,解决前端不能正确解码中文的问题。

1 、2、前端支持多个IP....可以无上限。多个IP进行并行查询

  • 支持多个IP“无上限” 这个功能就算实现也会存在性能问题,单次查询量过多响应时间也会随之变长,后面可能考虑支持自定义可查询的IP数量上限。

3、支持更新数据库

  • 现版本是有命令行模式支持更新IP地址库的 ./go-ip2region_windows_amd64.exe -d 2
    PS:近期可能先修复IP地址库下载地址错误的问题,其他需求如果你已经实现,也欢迎提PR。👋 @sirliu

目前我已修改支持多个IP(使用逗号分割)查询,测试了全球攻击俄罗斯的IP(1.7+W IP),局域网环境0.349999秒返回结果……还是单goroutine的。多goroutine速度至少应该能翻几倍吧,另外我准备支持post文本文件进行查询😀,当然还有并发需要支持。
还有筛选结果等等……
Originally posted by @hezhizheng in #1 (comment)

终于发现用Go扩展的ip2region了,能不能增加三个小功能呢

1、前端支持多个IP....可以无上限。
2、利用GO语言对前端请求的多个IP进行并行查询,节省查询时间。
3、支持更新数据库,目前是首次运行会下载最新数据库,但是服务器部署后,需要命令行支持更新数据库。
比如./goip2region update

我会基于此项目制作一个Docker镜像,方便一键部署。

BTW,我刚刚接触GO,还在学习当中,所以不会弄。
这是我写的,试图并发查询的代码,结果运行时报错(signal: killed):

package main

import (
	"bufio"
	"fmt"
	"os"

	"github.com/lionsoul2014/ip2region/binding/golang/ip2region"
)

func main() {
	result := make(chan ip2region.IpInfo)
	region, err := ip2region.New("ip2region.db")

	if err != nil {
		fmt.Println(err)
		return
	}
	defer region.Close()
	ips := findLines()
	for _, ip := range ips {
		go func(ip string) {
			r, _ := region.MemorySearch(ip)
			fmt.Println(r)
			result <- r
		}(ip)
	}
	for i := range result {
		fmt.Println(i)
	}
}

func findLines() []string {
	filePath := "./ips.txt"  //里面有1.7W个IP

	file, err := os.Open(filePath)
	if err != nil {
		fmt.Println(err)
	}
	defer file.Close()

	fd := bufio.NewReader(file)
	var tempArray []string
	for {
		lData, err := fd.ReadString('\n')
		if err != nil {
			break
		}
		tempArray = append(tempArray, lData)
	}

	return tempArray
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.