Git Product home page Git Product logo

node-ip2region's Introduction

ip2region nodejs 查询客户端实现

使用方式

完全基于文件的查询

// 导入包
const Searcher = require(".");
// 指定ip2region数据文件路径
const dbPath = "ip2region.xdb file path";

try {
  // 创建searcher对象
  const searcher = Searcher.newWithFileOnly(dbPath);
  // 查询
  const data = await searcher.search("218.4.167.70");
  // data: {region: '**|0|江苏省|苏州市|电信', ioCount: 3, took: 1.342389}
} catch (e) {
  console.log(e);
}

缓存 VectorIndex 索引

// 导入包
const Searcher = require(".");
// 指定ip2region数据文件路径
const dbPath = "ip2region.xdb file path";

try {
  // 同步读取vectorIndex
  const vectorIndex = Searcher.loadVectorIndexFromFile(dbPath);
  // 创建searcher对象
  const searcher = Searcher.newWithVectorIndex(dbPath, vectorIndex);
  // 查询 await 或 promise均可
  const data = await searcher.search("218.4.167.70");
  // data: {region: '**|0|江苏省|苏州市|电信', ioCount: 2, took: 0.402874}
} catch (e) {
  console.log(e);
}

缓存整个 xdb 数据

// 导入包
const Searcher = require(".");
// 指定ip2region数据文件路径
const dbPath = "ip2region.xdb file path";

try {
  // 同步读取buffer
  const buffer = Searcher.loadContentFromFile(dbPath);
  // 创建searcher对象
  const searcher = Searcher.newWithBuffer(buffer);
  // 查询 await 或 promise均可
  const data = await searcher.search("218.4.167.70");
  // data: {region:'**|0|江苏省|苏州市|电信', ioCount: 0, took: 0.063833}
} catch (e) {
  console.log(e);
}

查询测试

可以通过 node ./tests/test.app.js 命令来测试查询:

➜  nodejs git:(v2.0-for-nodejs) ✗ node ./tests/test.app.js --help
usage: Usage node test.app.js <agrs>

ip2region test app

optional arguments:
  -h, --help            show this help message and exit
  -d DB, --db DB        ip2region binary xdb file path, default: ../../data/ip2region.xdb
  -c CACHE_POLICY, --cache-policy CACHE_POLICY
                        cache policy: file/vectorIndex/content, default: content

例如:使用默认的 data/ip2region.xdb 文件进行查询测试:

➜  nodejs git:(v2.0-for-nodejs) ✗ node ./tests/test.app.js
parameters:
    dbPath: ../../data/ip2region.xdb
    cache-policy: content

type 'quit' to exit
ip2region>> 1.2.3.4
{ region: '美国|0|华盛顿|0|谷歌', ioCount: 0, took: 54.606261 }
ip2region>>

输入 ip 即可进行查询测试,也可以分别设置 cache-policy 为 file/vectorIndex/content 来测试三种不同缓存实现的查询效果。

bench 测试

➜  nodejs git:(v2.0-for-nodejs) ✗ node ./tests/bench.app.js --help
usage: Usage node test.app.js [command options]

ip2region benchmark app

optional arguments:
  -h, --help            show this help message and exit
  --db DB               ip2region binary xdb file path, default: ../../data/ip2region.xdb
  --src SRC             source ip text file path, default: ../../data/ip.merge.txt
  --cache-policy CACHE_POLICY
                        cache policy: file/vectorIndex/content, default: content

例如:通过默认的 data/ip2region.xdb 和 data/ip.merge.txt 文件进行 bench 测试:

➜  nodejs git:(v2.0-for-nodejs) ✗ node ./tests/bench.app.js
options:
    dbPath: ../../data/ip2region.xdb
    src: ../../data/ip2region.xdb
    cache-policy: content

Bench finished, {cachePolicy: content, total: 3417955, took: 20.591887765s, cost: 6.02462225658325μs/op}

可以通过分别设置 cache-policy 为 file/vectorIndex/content 来测试三种不同缓存实现的效果。

Note: 注意 bench 使用的 src 文件要是生成对应 xdb 文件相同的源文件。

单元测试及覆盖率结果

➜  nodejs git:(v2.0-for-nodejs) ✗ npm run coverage

...

  ip2region
    ✔ #newWithFileOnly and search#newWithVectorIndex and search#newWithBuffer and search


  3 passing (6ms)

----------|---------|----------|---------|---------|----------------------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------|---------|----------|---------|---------|----------------------------------
All files |   91.58 |    60.71 |     100 |   91.58 |
 index.js |   91.58 |    60.71 |     100 |   91.58 | 61,75,90,146,152,187,193,207,215
----------|---------|----------|---------|---------|----------------------------------

Made with ♥ by Wu Jian Ping

node-ip2region's People

Contributors

sheng96 avatar

Watchers

 avatar

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.