pb开发web应用

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/pcwe2002/article/details/53287965

说到pb开发web,一般是将pb发布成webservice,或者转成webform,两者都有很多限制,比如需要iis安装维护麻烦,调试困难,经常遇到莫名的错误,找不到资料,样式调整困难等问题。

随着互联网技术的发展和APP的流行,WEB前端和APP开发,越来越流行。要为前端和APP提供服务需要开发web应用,如果能为熟悉的工具进行开发,可以大大节省开发时间,减少学习成本。SATRDA支持PB插件功能,通过插件,可以实现返回网页、json,上传下载文件,把业务逻辑放到服务器执行等功能。

        插件使用非常简单,配置完成后插件就可以以多线程高效执行了。

配置插件
将示例中的plugins文件夹拷备到satserver.exe相同目录。

1.  修改plugins目录下config.cfg,

{

       "pbtest": {

              "Dir": "test",

              "Method":"Get;Post",

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

              "Type": "pb",

              "DLL":"pbvm90.dll",

              "AppName":"plugin"

       }

}

 

参数说明:

"Dir":"test" 表示插件的目录,所有插件都在plugins目录下面,这里值为”test”代表插件在plugins目录下的test目录

"Method":"Get;Post" 表示http调用的方法,可以为Get,Post,Any,Put,Delete中的一个或多个,多个以;分隔

"URL": "/pbtest/**" 表示响应以http://ip:port/pbtest开头的url。这里"/pbtest/**"可以响应http://127.0.0.1:5555/pbtest/test.go,也可以响应http://127.0.0.1:5555/pbtest/tttt.go等。如果设置为"URL": "/pbtest/test.go"则只响应http://127.0.0.1:5555/pbtest/test.go

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

"DLL": "pbvm90.dll" 表示pb运行库的dll名称,这里是pb9的运行库,其它版本请自行设置。比如12.5运行库设置为"DLL": "pbvm125.dll"

"AppName":"plugin" 表示pb的application的名称,一定要和创建的pb的名称对应起来

2.     创建PB工程

Pb工程和pbl创建和原来创建一样,Applicationname需要和配置的AppName一样。创建一个Function名称为satrda_service,如图:


当配置的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))



浏览器调用结果:


 开发注意:
1.对象的名称一定要是

方法的名称一定要是satrda_service

2.由于在不同的线程中,pb对象不支持跨线程访问,所以全局变量也会有多份,访问的全局变量可能是不同的对象,不要依赖全局变量存储公共信息。公共信息通过session或者数据库存储

 

运行效率和资源消耗:

大家肯定要关心,这样运行效率怎么样。我测试了一组数据,编写一个用例测试500个线程,每个执行20次,总共1W次Http请求服务端通过插件方式和原生golang的方式返回简单的hello world和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毫秒

可以看出两者用时几乎相同,通过比较内存使用也几乎相同。



下载地址:
http://download.csdn.net/detail/pcwe2002/9690008
最新版本下载,交流请到QQ群:345559891 



展开阅读全文

没有更多推荐了,返回首页