pb開發web應用 - 新聞資(zī)訊 - 雲南小程序開發|雲南軟件開發|雲南網站(zhàn)建設-西山區知普網絡科技工作室

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不管是網站(zhàn),軟件還是小程序,都要直接或間接能為您産生價值,我們在追求其視覺表現的同時,更側重于功能的便捷,營銷的便利,運營的高效,讓網站(zhàn)成為營銷工具,讓軟件能切實提升企業(yè)内部管理水平和(hé)效率。優秀的程序為後期升級提供便捷的支持!

您當前位置>首頁 » 新聞資(zī)訊 » 網站(zhàn)建設 >

pb開發web應用

發表時間:2016-11-22

發布人:葵宇科技

浏覽次數:45

說到pb開發web,一般是将pb發布成webservice,或者轉成webform,兩者都有很多限制,比如(rú)需要iis安裝維護麻煩,調試困難,經常遇到莫名的錯誤,找不到資(zī)料,樣式調整困難等問(wèn)題。

随着互聯網技術(shù)的發展和(hé)APP的流行,WEB前端和(hé)APP開發,越來越流行。要為前端和(hé)APP提供服務需要開發web應用,如(rú)果能為熟悉的工具進行開發,可(kě)以大大節省開發時間,減少(shǎo)學習成本。SATRDA支持PB插件功能,通(tōng)過插件,可(kě)以實現返回網頁、json,上傳下(xià)載文(wén)件,把業(yè)務邏輯放到服務器(qì)執行等功能。

插件使用非常簡單,配置完成後插件就可(kě)以以多線程高效執行了。

配置插件
将示例中(zhōng)的plugins文(wén)件夾拷備到satserver.exe相同目錄。

1. 修改plugins目錄下(xià)config.cfg,

如(rú)

{

"pbtest": {

"Dir": "test",

"Method":"Get;Post",

"URL":"/pbtest/**",

"Type": "pb",

"DLL":"pbvm90.dll",

"AppName":"plugin"

}

}

參數說明:

"Dir":"test" 表示插件的目錄,所有插件都在plugins目錄下(xià)面,這裡值為”test”代表插件在plugins目錄下(xià)的test目錄

"Method":"Get;Post" 表示http調用的方法,可(kě)以為Get,Post,Any,Put,Delete中(zhōng)的一個(gè)或多個(gè),多個(gè)以;分隔

"URL": "/pbtest/**" 表示響應以http://ip:port/pbtest開頭的url。這裡"/pbtest/**"可(kě)以響應http://127.0.0.1:5555/pbtest/test.go,也可(kě)以響應http://127.0.0.1:5555/pbtest/tttt.go等。如(rú)果設置為"URL": "/pbtest/test.go"則隻響應http://127.0.0.1:5555/pbtest/test.go

"Type": "pb" 表示調用PB插件

"DLL": "pbvm90.dll" 表示pb運行庫的dll名稱,這裡是pb9的運行庫,其它版本請自行設置。比如(rú)12.5運行庫設置為"DLL": "pbvm125.dll"

"AppName":"plugin" 表示pb的application的名稱,一定要和(hé)創建的pb的名稱對應起來

2. 創建PB工程

Pb工程和(hé)pbl創建和(hé)原來創建一樣,Applicationname需要和(hé)配置的AppName一樣。創建一個(gè)Function名稱為satrda_service,如(rú)圖:


當配置的url被調用時,會調用到該方法。

satrda_service方法代碼


//處理Http請求
//as_url   
blob lb_url,lb_ctrl,lb_body,lb_buf

String ls_info,ls_value
long i,ll_len

//Sleep(10)
ResponseHeaderSet(al_context,"Content-Type","text/html; charset=utf-8")

lb_ctrl = blob("~t~t")
lb_url = blob(ls_info)

ls_value = space(255)
RequestHeaderGet(al_context,"Accept-Encoding",ls_value,255)

lb_url += blob(trim(ls_value)) + lb_ctrl

//ls_value = space(255)
//RequestFormValue(al_request,"name",ls_value,255)
//lb_url += blob(trim(ls_value)) + lb_ctrl

ResponseWrite(al_context,lb_url,len(lb_url))
//讀取提交的内容
lb_buf = blob(space(1024))
do 
	ll_len = RequestRead(al_context,lb_buf,1024)
	if ll_len > 0 then
		lb_body += blobMid(lb_buf,1,ll_len)
	end if
loop while ll_len <> -1

ResponseWrite(al_context,lb_body,len(lb_body))



浏覽器(qì)調用結果:


開發注意:
1.對象的名稱一定要是

方法的名稱一定要是satrda_service

2. 由于在不同的線程中(zhōng),pb 對象不支持跨線程訪問(wèn),所以全局變量也會有多份,訪問(wèn)的全局變量可(kě)能是不同的對象,不要依賴全局變量存儲公共信息。公共信息通(tōng)過 session 或者數據庫存儲

運行效率和(hé)資(zī)源消耗:

大家肯定要關(guān)心,這樣運行效率怎麼樣。我測試了一組數據,編寫一個(gè)用例測試500個(gè)線程,每個(gè)執行20次,總共1W次Http請求服務端通(tōng)過插件方式和(hé)原生golang的方式返回簡單的hello world和(hé)http頭

pb插件代碼

ResponseHeaderSet(al_context,"Content-Type","text/html; charset=utf-8")

lb_body = blob("hello world!")
ResponseWrite(al_context,lb_body,len(lb_body))

用pb編寫的插件
耗時:13.6718秒,平均每次1.367毫秒
用golang原生返回
耗時:13.3281秒, 平均每次1.332毫秒

可(kě)以看出兩者用時幾乎相同,通(tōng)過比較内存使用也幾乎相同。



下(xià)載地址:
http://download.csdn.net/detail/pcwe2002/9690008
最新版本下(xià)載,交流請到QQ群:345559891



相關(guān)案例查看更多