国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

OpenResty下使用Apache Ant Path匹配庫

TerryCai / 1366人閱讀

摘要:下使用匹配庫一簡介是一個基于與的高性能平臺而相對于編譯型語言性能比較差,所以我們使用編寫庫的方式集成到項目中去。使用調用來實現(xiàn)匹配。執(zhí)行測試獲取項目的程序并使用執(zhí)行它。

OpenResty下使用Apache Ant Path匹配庫 一、簡介

??OpenResty是一個基于 Nginx 與 Lua 的高性能 Web 平臺,而lua相對于編譯型語言性能比較差,所以我們使用編寫sharedobject庫的方式集成到OpenResty項目中去。luajit使用ffi調用libcgoantpath.so來實現(xiàn)pattern匹配。
??基于以上思路我們實現(xiàn)了一個符合Apache Ant Path標準的動態(tài)共享庫,Git地址:go-antpath v1.1,為了方大家使用我們還封裝了lua版本的lua-antpath v1.0.1,歡迎大家多多指導,共同進步。

二、參考

http://ant.apache.org/manual/api/org/apache/tools/ant/

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/PathMatcher.html

go-antpath

lua-antpath

https://github.com/golang/go/wiki/cgo

https://golang.org/cmd/cgo/

https://groups.google.com/forum/#!topic/golang-nuts/Nb-nfVdAyF0

三、編譯及運行環(huán)境 3.1 編譯環(huán)境
GNU Make 4.1  
golang 1.9.2+
git
3.2 運行環(huán)境
luajit 2.1  
antpath.go (執(zhí)行make的時候自動下載)
lua2go v1.0 (執(zhí)行make的時候自動下載)
cjson (OpenResty自帶優(yōu)良庫)
四、使用 4.1 make
#直接執(zhí)行make會默認執(zhí)行make all
make

#執(zhí)行過程
vibrant@vibrant-Thinkpad-T440P:~/lua/lua-antpath$ make
Cloning into "go-antpath"...
remote: Enumerating objects: 11, done.
remote: Counting objects: 100% (11/11), done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 267 (delta 4), reused 9 (delta 3), pack-reused 256
Receiving objects: 100% (267/267), 58.44 KiB | 160.00 KiB/s, done.
Resolving deltas: 100% (171/171), done.
Note: checking out "784165d119eea7faa4a880f00f1ea0d672c50799".

You are in "detached HEAD" state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b 

# remove the go-antpath project in gopath.
# move to GOPATH
get from internet
--2019-04-11 00:42:52--  https://raw.githubusercontent.com/vibrantbyte/go-antpath/v1.1.1/antpath.go
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.196.133
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.196.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1901 (1.9K) [text/plain]
Saving to: ‘a(chǎn)ntpath.go’

antpath.go          100%[===================>]   1.86K  --.-KB/s    in 0s      

2019-04-11 00:42:53 (99.0 MB/s) - ‘a(chǎn)ntpath.go’ saved [1901/1901]

--2019-04-11 00:42:53--  https://raw.githubusercontent.com/vibrantbyte/lua2go/v1.0/lua/lua2go.lua
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.196.133
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.196.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5135 (5.0K) [text/plain]
Saving to: ‘lua2go.lua’

lua2go.lua          100%[===================>]   5.01K  --.-KB/s    in 0s      

2019-04-11 00:42:54 (26.2 MB/s) - ‘lua2go.lua’ saved [5135/5135]

execute script
go build -ldflags "-s -w" -buildmode=c-shared -o libcgoantpath.so ./antpath.go
install application
clean successful
all is execute.
4.2 復制文件
# 生成文件
vibrant@vibrant-Thinkpad-T440P:~/lua/lua-antpath$ ls
libcgoantpath.so  LICENSE  lua2go.lua  main.lua  Makefile  README.md
將libcgoantpath.so和lua2go.lua 拷貝到你的自己的項目中使用,使用例子在main.lua文件中。
4.3 執(zhí)行測試
#獲取lua-antpath項目的main.lua程序并使用luajit執(zhí)行它。
luajit ./main.lua

文件調用如下:

local lua2go = require("lua2go")
local antpath = lua2go.Load("./libcgoantpath.so")
local cjson = require("cjson")

lua2go.Externs[[
   extern char* Version();
   extern void Increment(GoInt* value);
   extern GoBool IsPattern(GoString path);
   extern GoBool Match(GoString pattern,GoString path);
   extern GoBool MatchStart(GoString pattern,GoString path);
   extern GoString ExtractPathWithinPattern(GoString pattern,GoString path);
   extern GoString ExtractUriTemplateVariables(GoString pattern,GoString path);
   extern GoString Combine(GoString pattern1,GoString pattern2);
   extern void SetPathSeparator(GoString pathSeparator);
   extern void SetCaseSensitive(GoInt8 caseSensitive);
   extern void SetTrimTokens(GoInt8 trimTokens);
   extern void SetCachePatterns(GoInt8 cachePatterns);
 ]]

-- 使用Version函數(shù) -- begin --
local version = antpath.Version()
-- 1. 獲取版本號信息
local v = lua2go.ToLuaString(version)
-- 2. 打印版本號信息
print(v)
-- 使用Version函數(shù) -- end --

print("--------------------------")

-- 使用Increment函數(shù) -- begin --
-- 指針操作
local intPtr = lua2go.ToGoPointer(1)
antpath.Increment(intPtr)
print(lua2go.ToLua(intPtr[0]))
-- 使用Increment函數(shù) -- end --

print("--------------------------")

-- 使用Match函數(shù) -- begin --
-- 1. 驗證是否匹配
local bn = antpath.Match(lua2go.ToGoString("/*/1.html"),lua2go.ToGoString("/100/1.html"))
-- 2. 打印匹配信息
print(lua2go.ToLuaBool(bn))
-- 使用Match函數(shù) -- end --


print("--------------------------")

-- 使用IsPattern函數(shù) -- begin --
local ispattern = antpath.IsPattern(lua2go.ToGoString("/*/1.html"))
print(lua2go.ToLuaBool(ispattern))
-- 使用IsPattern函數(shù) -- end --

print("--------------------------")

-- 使用Combine函數(shù) -- begin --
local combine = antpath.Combine(lua2go.ToGoString("/hotels/*"),lua2go.ToGoString("/booking"))
-- 1. 打印需要的pattern信息
print(lua2go.ToLuaString(combine.p))
-- 2. 使用完成后回收信息
lua2go.AddToGC(combine.p)
-- 使用Combine函數(shù) -- end --

print("--------------------------")

-- 使用MatchStart函數(shù) -- begin --
local start = antpath.MatchStart(lua2go.ToGoString("/*/1.html"),lua2go.ToGoString("/100/1.html"))
print(lua2go.ToLuaBool(start))
-- 使用MatchStart函數(shù) -- end --

print("--------------------------")

-- 使用ExtractPathWithinPattern函數(shù) -- begin --
local variable = antpath.ExtractPathWithinPattern(lua2go.ToGoString("/docs/cvs/*.html"),lua2go.ToGoString("/docs/cvs/commit.html"))
print(lua2go.ToLuaString(variable.p))
-- 使用完成后回收信息
lua2go.AddToGC(variable.p)
-- 使用ExtractPathWithinPattern函數(shù) -- end --

print("--------------------------")

-- 使用ExtractUriTemplateVariables函數(shù) -- begin --
local map = antpath.ExtractUriTemplateVariables(lua2go.ToGoString("/hotels/{hotel}"),lua2go.ToGoString("/hotels/11232"))
local mapstr = lua2go.ToLuaString(map.p)
local data = cjson.decode(mapstr)
print(data.hotel)
lua2go.AddToGC(map.p)


-- 使用fExtractUriTemplateVariables函數(shù) -- end --

print("--------------------------")

-- 設置fields信息 -- begin --
antpath.SetPathSeparator(lua2go.ToGoString("/"))
print("設置SetPathSeparator成功")
antpath.SetCaseSensitive(0)
print("設置SetCaseSensitive成功")
antpath.SetTrimTokens(1)
print("設置SetTrimTokens成功")
antpath.SetCachePatterns(1)
print("設置SetCachePatterns成功")
-- 設置fields信息 -- end --

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/40588.html

相關文章

  • Openresty的開發(fā)閉環(huán)初探

    摘要:多返回值開始變得越來越與眾不同了允許函數(shù)返回多個結果。這種情況函數(shù)沒有足夠的返回值時也會用來補充。中的索引習慣以開始。 showImg(https://segmentfault.com/img/bVIcQU?w=136&h=103); 為什么值得入手? Nginx作為現(xiàn)在使用最廣泛的高性能后端服務器,Openresty為之提供了動態(tài)預言的靈活,當性能與靈活走在了一起,無疑對于被之前陷于...

    ruicbAndroid 評論0 收藏0
  • 日志平臺(網(wǎng)關層) - 基于Openresty+ELKF+Kafka

    摘要:現(xiàn)在用方式調用接口,中使用方式輸入內(nèi)容日志平臺網(wǎng)關層基于。日志平臺網(wǎng)關層基于到此為止,提取經(jīng)過網(wǎng)關的接口信息,并將其寫入日志文件就完成了,所有的接口日志都寫入了文件中。 背景介紹 1、問題現(xiàn)狀與嘗試 沒有做日志記錄的線上系統(tǒng),絕對是給系統(tǒng)運維人員留下的坑。尤其是前后端分離的項目,后端的接口日志可以解決對接、測試和運維時的很多問題。之前項目上發(fā)布的接口都是通過Oracle Service...

    xumenger 評論0 收藏0

發(fā)表評論

0條評論

TerryCai

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<