DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: jeff1314
今日帖子: 10
在线用户: 11
导航: 论坛 -> Web应用开发 斑竹:bodies  
作者:
男 c5soft (大道至简) ▲▲▲▲▲ -
普通会员
2016/6/13 22:41:35
标题:
WYSIWYG WebBuilder + Delphi 开发Web应用的最佳搭档 浏览:14117
加入我的收藏
楼主: WYSIWYG WebBuilder=W,Delphi=D,简称Web开发WD方案
用W写前台网页,用D写后台处理程序
用W制作html+css+javascript, 调用D写的RestFul Service,前后台全完分离。
W干活注重直观,是所见即所得,织网像是在“画画”,能做出任意想要的效果。
D干活注重高效,能够连接任何数据源,提供前台任何数据交互。

前台可使用jQuery,Augular,React等技术,后台可使用WebBroker、Intraweb、realthinclient、mORMot等技术。

前后台通讯采用AJAX,数据格式选用json。


Tomcat、ASP.NET、PHP、Nodejs...通通一边歇着去。(前两家的货因java与c#的缘故,离不开虚拟机,性能不行,慢的要死;后两家的货倒是效率不错,速度还行,可惜不能编译,没有隐私。Rust来了,倒是应该笑脸相迎,不过Rust现在还处在幼稚园阶段)。

嫌不过瘾,来一段前台jQuery页面启动代码:

<script>
$(document).ready(function () {
  $.ajax({
    url: '/rest/'+pageName+'?ask=startInfo',
    type: "GET",
    dataType: "json"
  }).then(ajaxProcess, function (jqXHR, textStatus, errorThrown) {
    showMsg('textStatus is ' + textStatus + ', errorThrown is ' + errorThrown);
  });
});


function ajaxProcess(data, textStatus, jqXHR)
{
    var key,items,html;
    if (data.moveTo) {
      window.location.replace(data.moveTo);      
    } else if (data.errorMsg) {
      showMsg(data.errorMsg);
    } else {
      if (data.elmHtmList)   
        for (key in data.elmHtmList)
          $('#'+key).html(data.elmHtmList[key]);
      if (data.edtValList)   
        for (key in data.edtValList)
          $('#'+key).val(data.edtValList[key]);
      if (data.cmbOptList)   
        for (key in data.cmbOptList){
          items=data.cmbOptList[key];
          html='';
          $.each(items,function(i, value){
          if (typeof(value)==='object')
          html+='<option value="'+value.value+'">'+value.name+'</option>'; 
          else
          html+='<option value="'+value+'">'+value+'</option>'; 
          });
          $('#'+key).html(html);
        }
      if (data.script)
        eval(data.script);   
    }
}

function showMsg(info)
{
 $('#dlgInfoText').html(info);
 ShowObject('dlgInfo', 1);
}
</script>

有耐心的看官,你一定品出其中滋味。
----------------------------------------------
-
作者:
男 c5soft (大道至简) ▲▲▲▲▲ -
普通会员
2016/6/13 23:50:56
1楼: W是婀娜多姿的美女,D是所向披靡的猛男,男女搭配,干活不累!
----------------------------------------------
-
作者:
男 brh616 (风风风) ★☆☆☆☆ -
盒子活跃会员
2016/6/14 8:06:26
2楼: 有测试网页和程序吗?
----------------------------------------------
风风风
作者:
男 star5 (星五) ★☆☆☆☆ -
盒子活跃会员
2016/6/14 8:22:21
3楼: 呵呵,最近我也在折腾这块,我是rtc+firedac,rtc自带脚本支持,目前已经在几个项目上使用,网页效果还行,就是自己js不太懂,改网页的时候比较费时间。

这样做接口不需要编译,只要编写下脚本就行了,维护和添加功能都很方便。
----------------------------------------------
博客 - http://offeu.com
脚本模型 - http://webpascal.com
需要短信接口的请联系我,可发行业与营销内容。
作者:
男 star5 (星五) ★☆☆☆☆ -
盒子活跃会员
2016/6/14 8:26:58
4楼: 这个是之前的介绍文档。
此帖子包含附件:star5_201661482656.doc 大小:1.50M
----------------------------------------------
博客 - http://offeu.com
脚本模型 - http://webpascal.com
需要短信接口的请联系我,可发行业与营销内容。
作者:
男 star5 (星五) ★☆☆☆☆ -
盒子活跃会员
2016/6/14 8:30:06
5楼: 我一开始是考虑rtc+pax+firedac的,也实现了基本功能,但发现pax我用的不深入,没有发挥pax的强大,类似功能只要rtcscript就够了,于是就把pax移除了。

目前的形式,就是内核大量常用的函数去支持脚本的调用,这样很多功能在脚本中就能轻易实现,维护起来是自由方便很多,只带手机的情况下,也可以添加或维护接口。
----------------------------------------------
博客 - http://offeu.com
脚本模型 - http://webpascal.com
需要短信接口的请联系我,可发行业与营销内容。
作者:
男 vmao (毛小毛) ★☆☆☆☆ -
盒子活跃会员
2016/6/14 8:32:31
6楼: 用Delphi写最大的缺陷是虚拟空间不好租,asp.net,php这样的主机好租,价格也便宜。而用Delphi,成本直接就上来了。我以前也考虑过后台用Delphi,但是发布的时候还是麻烦呀~
----------------------------------------------
-
作者:
男 star5 (星五) ★☆☆☆☆ -
盒子活跃会员
2016/6/14 8:37:47
7楼: 支持isapi的也可以,或者vps,因为项目原因,我们都是自己托管服务器的,所以不用考虑这方面问题,rtc也可以写linux版本应用的。

来,附上一个小功能的截图:
此帖子包含附件:
PNG 图像
大小:50.4K
----------------------------------------------
博客 - http://offeu.com
脚本模型 - http://webpascal.com
需要短信接口的请联系我,可发行业与营销内容。
作者:
男 star5 (星五) ★☆☆☆☆ -
盒子活跃会员
2016/6/14 8:39:15
8楼: 功能比较简单,只是登录和数据维护界面,尝试了密码转换后跳转,div层管理,ajax应用等。

没办法,以前没学过js,有点无语。
此帖子包含附件:
PNG 图像
大小:67.9K
----------------------------------------------
博客 - http://offeu.com
脚本模型 - http://webpascal.com
需要短信接口的请联系我,可发行业与营销内容。
作者:
男 star5 (星五) ★☆☆☆☆ -
盒子活跃会员
2016/6/14 8:41:14
9楼: 后续打算找html5模板来改,或者让做网页的人处理,我只要处理下数据部分就行。
----------------------------------------------
博客 - http://offeu.com
脚本模型 - http://webpascal.com
需要短信接口的请联系我,可发行业与营销内容。
作者:
男 star5 (星五) ★☆☆☆☆ -
盒子活跃会员
2016/6/14 8:48:20
10楼: 或许有喷子会说,你丫的怎么不直接用php,我只能告诉你,框架也支持php脚本,直接写php也可以。

至于我么,简单php能写,复杂的就累了,所以还是写object pascal的会方便点。
----------------------------------------------
博客 - http://offeu.com
脚本模型 - http://webpascal.com
需要短信接口的请联系我,可发行业与营销内容。
作者:
男 c5soft (大道至简) ▲▲▲▲▲ -
普通会员
2016/6/14 9:07:51
7楼: @vmao
你租vps呀,相当于你的一台电脑放在云端,想装啥装啥。

@各位
大家好像没有理解我的意思。服务器端你可别跑脚本,服务器端你用JsonDataObjects将dbGO/UniDAC的数据转换成UTF8编码的Json格式返回浏览器。需要你精通的是javascript语言,软件能力取决于你javascript编程能力,功夫都花在浏览器那端,html、css你也得懂。后台你随时可以换,想用php,scala,c++也可以,不就是一个ajax应答吗。但是咱们,用delphi写起来最随手。
----------------------------------------------
-
作者:
男 star5 (星五) ★☆☆☆☆ -
盒子活跃会员
2016/6/14 9:12:54
11楼: 嗯,我考虑的是维护方便,所以脚本是需要的,效率上目前测试来看也还行。

如果只是实现一个服务端,做些输出,那太简单了,维护麻烦。

比如你delphi ide版本更替时,还要重新对各功能进行测试,以防止编译出来的某些功能存在问题,这是个麻烦的事情,我是越来越懒了。
----------------------------------------------
博客 - http://offeu.com
脚本模型 - http://webpascal.com
需要短信接口的请联系我,可发行业与营销内容。
作者:
男 c5soft (大道至简) ▲▲▲▲▲ -
普通会员
2016/6/14 9:23:54
11楼: 为什么要用W,W使你的工作效率立马提升,W适合新手也适合老手。W下你还可以自定义控件(extensions)。不过,W设计的自动后台交互也是php,要与delphi交互,不会javascript,你玩不转。等这一块的玩家多了,做点extension共享出来,就能让不会javascript的Delphier也能与后台交互了。
----------------------------------------------
-
作者:
男 c5soft (大道至简) ▲▲▲▲▲ -
普通会员
2016/6/14 9:26:36
12楼: @Star5
我把很多逻辑写在SQL的存储过程里,这样也很方便。
你用rtc+脚本,实际上还是把网页加工做在后台了,浏览器请求网页时需要服务器端先做处理,转换以后再发出去。我的思路是,网页完全是静态文件,服务器端不处理,浏览器加载网页后通过与后台ajax交互,由浏览器负责网页做加工处理。
----------------------------------------------
-
作者:
男 wk_knife (wk_knife) ★☆☆☆☆ -
盒子活跃会员
2016/6/14 9:44:22
13楼: 那HTML5 builder + Delphi 不是更绝配了?
----------------------------------------------
-
作者:
男 vmao (毛小毛) ★☆☆☆☆ -
盒子活跃会员
2016/6/14 10:14:33
14楼: 我欣赏Delphi的快速开发能力,但是用Delphi做后端我还是持保留意见。我现在还在用asp做后端,当然也是十几年前学的三脚猫功夫,现在好多人都说我老古董了。主要还是部署方便,换空间也容易,不挑环境。Delphi开发的服务,自己就要占一个端口,再开发一个还要再占一个端口,如果都弄在一起,那这个后端也太大了,不适合多个程序部署在一台机上。asp,php什么的就没这个要求了,直接建虚拟目录就成,还能直接把域名挂上去。Delphi的都不知道怎么搞,我也没仔细研究过。

当然,用脚本语言开发也有脚本语言的苦,太他妈难调试了,只能不断用response.write 来看走到哪一步,用Delphi生产效率那是没得说的。不过你这样研究研究也好,就由你当小白鼠帮我们先踩踩有多少坑好了,呵呵~~
----------------------------------------------
-
作者:
男 vmao (毛小毛) ★☆☆☆☆ -
盒子活跃会员
2016/6/14 10:23:41
15楼: 还有,前一阵子看万一的博客,里面有用IntraWeb做后台的,直接用Delphi开发,能和.net结合,好像需要几个dll调度一下,开发完直接和.net程序一样,发布到虚拟空间就成。但是对空间有要求,.net4.5以上,还要支持什么MVC

星5,这个模式也值得参考:
http://www.cnblogs.com/del/p/3759852.html
----------------------------------------------
-
作者:
男 star5 (星五) ★☆☆☆☆ -
盒子活跃会员
2016/6/14 10:26:08
15楼: 只需要一个端口,支持虚拟目录,和你用iis+asp一样,脚本比较简单,调试也方便。复杂的都封装到函数里了,脚本只是调用和输出。
----------------------------------------------
博客 - http://offeu.com
脚本模型 - http://webpascal.com
需要短信接口的请联系我,可发行业与营销内容。
作者:
男 star5 (星五) ★☆☆☆☆ -
盒子活跃会员
2016/6/14 10:34:19
16楼: 你要明白IntraWeb的优势是什么,现在很多给IntraWeb定制的组件可用,还是不错的,不过我不喜欢用。

我也尝试过unigui一类的,开发也很方便。
----------------------------------------------
博客 - http://offeu.com
脚本模型 - http://webpascal.com
需要短信接口的请联系我,可发行业与营销内容。
作者:
男 star5 (星五) ★☆☆☆☆ -
盒子活跃会员
2016/6/14 10:39:11
17楼: @c5soft

其实吧,纯输出,不如套用模板方便,纯输出你要先把页面安置好,加上一堆的js css什么的,太累了,不如直接在页面中嵌入脚本,像asp一样,写段代码多方便。

至于动态还是静态,你用ajax本身已经有点动态的意思了,这个并不是重点,无所谓的。ajax会暴露你的参数,而且跨域比较麻烦。

我现在脚本调用的函数是只允许脚本调用的,外部是不能直接访问到的,一些页面也支持内部调用限制,安全没有问题,服务端用delphi写,也可以保护程序员的利益。
----------------------------------------------
博客 - http://offeu.com
脚本模型 - http://webpascal.com
需要短信接口的请联系我,可发行业与营销内容。
作者:
男 c5soft (大道至简) ▲▲▲▲▲ -
普通会员
2016/6/14 10:46:57
15楼: 习惯用asp干活的,换成php,立马高大上,最近发布的php7速度更是了得。不过要是后台连接sql server数据库,你只能用php5,暂时享受不到php7带来的刺激。php比asp更简单,部署也十分方便,免安装,用php搭配nginx,是一个成熟的方案。

我罗嗦这么多,主要是写给用delphi做web开发的,转变一下思路,采用最好的工具,提高生产力。

不过话又说回来,熟悉得才是最好的。
----------------------------------------------
-
作者:
男 blueflag (昆了) ★☆☆☆☆ -
盒子活跃会员
2016/6/16 8:50:55
18楼: 新思路新技术,开拓新的增长点
----------------------------------------------
-
作者:
男 feiyanm (feiyanm) ▲▲▲▲▲ -
普通会员
2016/6/17 8:36:29
19楼: 支持楼上的c5,熟悉pascal的开发人员上手php+ngnix也是分分钟的事情...
----------------------------------------------
Delphi威武!千秋万代,一统江湖!Delphi威武!千秋万代,一统江湖!Delphi威武!千秋万代,一统江湖!Delphi威武!千秋万代,一统江湖!Delphi威武!千秋万代,一统江湖!Delphi威武!千秋万代,一统江湖!Delphi威武!千秋万代,一统江湖!我去WC吐一会儿去!
作者:
男 chro (chro) ★☆☆☆☆ -
普通会员
2016/6/17 13:36:48
20楼: 其实上手node.js也很简单
出于学习目的,前一阵子把php+apache做的一个小东西改成了node.js,没花多长时间,,即小巧又绿色,部署起来方便极了。
反正前端也得用javascript,把node学了都是顺手的事儿。

熟悉delphi/pascal,还是想用pascal?可以呀,把一些后台操作用pascal实现,在node.js或者php里调用一下就好了。还能实现代码“隐私”
----------------------------------------------
-
作者:
男 c5soft (大道至简) ▲▲▲▲▲ -
普通会员
2016/6/17 19:30:18
21楼: Nodejs做开发最大的痛点是调试很麻烦。三方依赖太多,质量良莠不齐。不像用delphi/java/c#写后台,产品质量完全在自己的掌控之下。

实际应用中可以把php,nodejs,tomcat,intraweb等各种后端通过nginx反向代理,结合起来用。

用Nodejs做开发,一定要用jetbrains的工具,WebStorm/phpStorm/IDEA,宇宙最强javascript手写调试工具。

用Nodejs需要c++原生库时(比如msnodesql),不必装vs, 只装visualcppbuildtools,开销小得多。
----------------------------------------------
-
作者:
男 hotyei (青出于蓝) ★☆☆☆☆ -
盒子活跃会员
2016/6/19 11:17:05
22楼: 我是Delphi 和 .NET 全栈程序员,Delphi 开发十几年了,.NET WinForm 和 Web 开发七八年了,所以这个问题我可以评论一下。

我现在以 .NET Web(MVC) 开发为主,WinForm 和 Delphi 开发为辅,但哪个都不能代替哪一个。现在实际情况是结合开发(包括 Delphi),与硬件相关的接口、一些小工具我会使用 Delphi,其余的大多数使用 Web。Delphi 的Web和后端开发都不是强项(主要是与数据的交互太依赖于DataSet而不是面向对象),开发超大型项目非常困难。Web 开发在 IDE 上,使用.NET会提供非常多的帮助,可以很容易开发出稳定的程序,最重要的是,用.NET开发后端,不会像 Delphi 一样:明明程序写得没错,但时不时会出现一些坑需要自己去解决。
----------------------------------------------
米软科技有限公司http://www.szmesoft.com
作者:
男 c5soft (大道至简) ▲▲▲▲▲ -
普通会员
2016/6/23 22:50:10
23楼: 最简单的才是最可靠的。
要找一个支持Delphi的后台方案真不容易,这个方案要能够支持万次以上的并发连接,能够足够的稳定,必须有完全的源代码,还要简单易懂。
在多种后台方案中,最后选择IIS+ISAPI,ISAPI用WebBroker来写。
IIS上安装Rewrite将xxxx.dll转换为非常友好的URI。下面是URL转换的例子:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <defaultDocument>
      <files>
        <clear />
        <add value="index.html" />
        <add value="Default.htm" />
        <add value="Default.asp" />
        <add value="index.htm" />
        <add value="iisstart.htm" />
      </files>
    </defaultDocument>
    <rewrite>
    <rules>
      <rule name="test" stopProcessing="true">
      <match url="^aaa.html" />
      <action type="Rewrite" url="/wbtest.dll" />
      </rule>
      <rule name="test 2" stopProcessing="true">
      <match url="^aaa" />
      <action type="Rewrite" url="/wbtest.dll" />
      </rule>
    </rules>
    </rewrite>
  </system.webServer>
</configuration>

这样配置后http://127.0.0.1/aaa或http://127.0.0.1/aaa.html都将实际访问
http://127.0.0.1/wbtest.dll

这个方案将Session放到数据库中,SessionID通过Cookie来专递。这样就可以通过域名轮询或者通过nginx反向代理实现多台服务器负载平衡。
这个方案中前端用WebBuilder做出来的网页是静态文件,配合多台数据库及web服务器能够实现秒开网页的用户体验。
----------------------------------------------
-
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2016/6/24 12:02:34
24楼: 爽歪歪,Delphi啥都可以做:
==========

http://122.0.74.171/baidutts1.html
Delphi实现的语音合成接口

http://122.0.74.171/alidayu.html
Delphi实现的短信、语音推送接口
----------------------------------------------
樵夫的大马甲
作者:
男 gdsa (文稠紧) ★☆☆☆☆ -
盒子活跃会员
2016/6/24 16:19:48
25楼: 没声音???再好的戏也出不来。。。按此在新窗口浏览图片
----------------------------------------------
-
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2016/6/25 8:32:23
26楼: 有声音的,你的浏览器版本太低了吧
----------------------------------------------
樵夫的大马甲
作者:
男 c5soft (大道至简) ▲▲▲▲▲ -
普通会员
2016/6/27 18:14:34
27楼: 开发ISAPI的dll调试要点:

按照前文的思路,delphi只负责后台动态的json/captcha服务,其余全是静态文件。如何调试按isapi规范编译生成的dll文件呢?这里需要nginx来帮忙:

1.建立两个项目(dpr/dproj),一个生成exe,一个生成dll,两份项目共用一份webmodule。
2.搭建nginx运行环境,将iis的静态文件(inetpub\wwwroot)全部复制到nginx网页文件夹下(Nginx\html),将iis对dll的调用通过nginx的反向代理转到第1步编译并运行起来的exe上。下面是nginx.conf反向代理的配置举例:
    server {
        listen       88;
        server_name  localhost;

        location / {
          root   html;
          index  index.html index.htm;
        }

        #proxy rest to WebBroker listening on 127.0.0.1:8080        
        location ~ /rest/.*$ {
          proxy_pass   http://127.0.0.1:8080;
        }

}

该配置文件指引nginx将所有/rest/开头的url转到本机的8080端口。
此帖子包含附件:
JPEG 图像
大小:20.0K
----------------------------------------------
-
作者:
男 yxsoft (yxsoft) ★☆☆☆☆ -
盒子活跃会员
2016/6/27 20:04:38
28楼: 原来是在看动作片
----------------------------------------------
Great!
作者:
男 c5soft (大道至简) ▲▲▲▲▲ -
普通会员
2016/6/27 23:15:29
29楼: WebBroker实现Session的代码片段:

第一步:控制SessionID
procedure TAppWebModule.WebModuleBeforeDispatch(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
  FSessionID := Request.CookieFields.Values[cstCookieSessionID];
  if Length(FSessionID) = 0 then
      StartSession
  else begin
    ......
  end;
end;

function GetRandomString(NumChar: UInt32): string;
const
  CharMap = 'qwertzuiopasdfghjklyxcvbnmQWERTZUIOPASDFGHJKLYXCVBNM1234567890'; { Do not Localize }
  MaxChar: UInt32 = Length(CharMap) - 1;
var
  i: Integer;
begin
  randomize;
  SetLength(Result, NumChar);
  for i := 1 to NumChar do begin
    Result[i] := CharMap[Random(MaxChar) + 1];
  end;
end;

procedure TAppWebModule.StartSession;
var
  LCookie: TStringList;
  p: TPooledStoredProc;
begin
  p := NewStoredProc('dbo.appSessionExist', cstdbSecondary);
  while True do begin
    FSessionID := GetRandomString(15);
    p.ParamByName('@SId').AsString := FSessionID;
    p.ExecProc;
    if not p.ParamByName('@Exist').AsBoolean then
        break;
  end;
  p.Free;
  LCookie := TStringList.Create;
  LCookie.Add(cstCookieSessionID + '=' + FSessionID);
  Response.SetCookieField(LCookie, '', '', {$IFDEF ISAPI} -1{$ELSE}0{$ENDIF}, False);
  FreeAndNil(LCookie);
end;

第二步:Session数据读写

 TAppWebModule = class(TWebModule)
    ...
    function GetSession(const AKey: string): string;
    procedure SetSession(const AKey, Value: string);
    ...
    property SessionID: string read FSessionID;
    property Session[const AKey: string]: string read GetSession write SetSession;
    ...
end

function TAppWebModule.GetSession(const AKey: string): string;
var
  p: TPooledStoredProc;
begin
  p := NewStoredProc('dbo.appSessionGet', cstdbSecondary);
  p.ParamByName('@SID').AsString := SessionID;
  p.ParamByName('@SKey').AsString := AKey;
  p.ExecProc;
  if p.ParamByName('@SVal').IsNull then
      Result := ''
  else
      Result := p.ParamByName('@SVal').AsString;
  p.Free;
end;

procedure TAppWebModule.SetSession(const AKey, Value: string);
var
  p: TPooledStoredProc;
begin
  p := NewStoredProc('dbo.appSessionSet', cstdbSecondary);
  p.ParamByName('@SID').AsString := SessionID;
  p.ParamByName('@SKey').AsString := AKey;
  p.ParamByName('@SVal').AsString := Value;
  p.ExecProc;
  p.Free;
end;

Session数据全部以String保存,要读写对象,通过ToJSon/FromJSon转换
下面是SQL Server数据库上的定义:
IF EXISTS(SELECT 1 FROM sysobjects WHERE name='AppSessions' AND type='U' AND uid=user_id('dbo'))
  DROP TABLE dbo.AppSessions
GO
CREATE TABLE dbo.AppSessions(
  SId   VARCHAR(15)   NOT NULL,
  SKey  VARCHAR(80)   NOT NULL,
  SVal  VARCHAR(7168) NULL,
  SExp  DATETIME     NULL,
  CONSTRAINT PK_AppSessions PRIMARY KEY(SId,SKey)
)
GO

IF EXISTS(SELECT 1 FROM sysobjects WHERE name='appSessionExist' AND type='P' AND uid=user_id('dbo'))
  DROP PROCEDURE dbo.appSessionExist
GO
CREATE PROCEDURE dbo.appSessionExist
@SId  VARCHAR(15),
@Exist BIT OUTPUT
WITH ENCRYPTION 
AS
SET NOCOUNT ON
SET @Exist=0
IF EXISTS(SELECT 1 FROM dbo.AppSessions WHERE SId=@SId)
  SET @Exist=1
SET NOCOUNT OFF
GO


IF EXISTS(SELECT 1 FROM sysobjects WHERE name='appSessionGet' AND type='P' AND uid=user_id('dbo'))
  DROP PROCEDURE dbo.appSessionGet
GO
CREATE PROCEDURE dbo.appSessionGet
@SId  VARCHAR(15),
@SKey VARCHAR(80),
@SVal VARCHAR(7168) OUTPUT
WITH ENCRYPTION 
AS
SET NOCOUNT ON
DECLARE @Expire DATETIME
SELECT @SVal=SVal,@Expire=SExp FROM dbo.AppSessions WHERE SId=@SId AND SKey=@SKey
IF @Expire<GETDATE() BEGIN
  SET @SVal=NULL
  DELETE dbo.AppSessions WHERE SId=@SId
END ELSE IF @Expire>=GETDATE()
  UPDATE dbo.AppSessions SET SExp=@Expire+1 WHERE SId=@SId
SET NOCOUNT OFF
GO

IF EXISTS(SELECT 1 FROM sysobjects WHERE name='appSessionSet' AND type='P' AND uid=user_id('dbo'))
  DROP PROCEDURE dbo.appSessionSet
GO
CREATE PROCEDURE dbo.appSessionSet
@SId  VARCHAR(15),
@SKey VARCHAR(80),
@SVal VARCHAR(7168)
WITH ENCRYPTION 
AS
SET NOCOUNT ON
DECLARE @Expire DATETIME
SET @Expire=GETDATE()+1
IF EXISTS(SELECT 1 FROM dbo.AppSessions WHERE SId=@SId AND SKey=@SKey) BEGIN
  UPDATE dbo.appSessions SET SVal=@SVal WHERE SId=@SId AND SKey=@SKey
  UPDATE dbo.AppSessions SET SExp=@Expire WHERE SId=@SId
END ELSE
  INSERT INTO dbo.AppSessions VALUES(@SId,@SKey,@SVal,@Expire)  
SET NOCOUNT OFF
GO
----------------------------------------------
-
作者:
男 c5soft (大道至简) ▲▲▲▲▲ -
普通会员
2016/6/27 23:23:16
30楼: 初步测试结果:全面超越IntraWeb。

代码量更小,速度更快,页面更容易做美观。
能够实现Intraweb无法实现的高并发。
能够接收浏览器端发送来的任何编码格式的数据,完全掌控页面。

只有一个附加条件:如果要做前端页面,你必须会Javascript,不然你体会不到其中的奥妙。
----------------------------------------------
-
作者:
男 linsigong (lins) ▲▲▲▲△ -
普通会员
2016/6/28 18:03:49
31楼: 可以看看这个:

http://bbs.2ccc.com/topic.asp?topicid=507395
----------------------------------------------
-
作者:
男 c5soft (大道至简) ▲▲▲▲▲ -
普通会员
2016/6/28 18:59:21
32楼: @linsigong
PWP开源吗?没找到下载的地方。
对使用delphi实现fast-cgi很有兴趣。
再开发一种脚本是不是方向有问题?能比php/nodejs更好吗?
delphi的努力方向是以Native Code取胜,必须编译成dll/exe。
----------------------------------------------
-
作者:
男 tonzi (tonzi) ★☆☆☆☆ -
普通会员
2016/6/28 19:47:59
33楼: 长见识!
不知道sgcWebSockets怎样?

sgcWebSockets is a complete package providing access to WebSockets protocol, allowing to create WebSockets Servers, Intraweb Clients or WebSocket Clients in VCL, FreePascal and Firemonkey applications.

 

Fully functional multithreaded WebSocket server according to RFC 6455.

Supports Firemonkey (Windows and MacOS).

Supports NEXTGEN Compiler (IOS and Android Support).

Supports Lazarus / FreePascal.

Supports CBuilder.

Supports Chrome, Firefox, Safari, Opera and Internet Explorer (including iPhone, iPad and iPod)

Supports C#.NET using compiled library (for Windows 32 and 64 bits).

Multiple Threads Support

Supports Message Compression using PerMessage_Deflate extension RFC 7692.

Supports Text and Binary Messages.

Supports Server and Client Authentication.

Server component providing WebSocket and HTTP connections through the same port.

Proxy Server component allowing to Web Browsers to connect to any TCP server.

Load Balancing Server.

Client WebSocket supports connections through Socket.IO Servers.

FallBack support through Adobe Flash for old Web Browsers like Internet Explorer from 6 to 9.

Supports Server-Sent Events (Push Notifications) over HTTP Protocol.

WatchDog and HeartBeat built-in support.

Client WebSocket supports connections through HTTP Proxy Servers and SOCKS Proxy Servers.

Events Available: OnConnect, OnDisconnect, OnMessage, OnError, OnHandshake

Built-in sub-protocols: JSON-RPC 2.0, Dataset, WebRTC and WAMP

Support for JSON parsers: Delphi JSON and XSuperObject. 

Built-in Javascript libraries to support browser clients.

Easy to setup

Javascript Events for a full control

Async Events using Ajax

SSL/TLS Support for Server / Client Components (OpenSSL libraries required).

 

Main components available are:

 

TsgcWebSocketServer: Non-visual component, it's used to manage client threaded connections. Supports RFCC 6455.

TsgcWebSocketHTTPServer: Non-visual component, it's used to manage client threaded connections. Supports RFCC 6455. Supports HTTP Requests using an unique port for WebSocket and HTTP Connections.

TsgcWebSocketLoadBalancerServer: Non-visual component, it's used to distribute messages across several back-up servers.

TsgcWebSocketClient: Non-visual component, used to establish a WebSocket connection with a WebSocket server.

TsgcWebsocketProxyServer: Non-visual component, used to translate websocket connections to normal TCP connections.

TsgcIWWebSocketClient: Non-visual component, used on Intraweb forms to establish a WebSocket connection with a WebSocket Server.

 

 

You can use WebSockets too, using sgcWebSockets.dll, modules available:

 

Delphi 
C# .NET
----------------------------------------------
-
作者:
男 linsigong (lins) ▲▲▲▲△ -
普通会员
2016/6/28 23:45:26
34楼: @c5soft

进 PWP  QQ 群: 226946446 ,

里面可以下载。  目前暂时不开源,程序可以免费无限制使用。
----------------------------------------------
-
作者:
男 c5soft (大道至简) ▲▲▲▲▲ -
普通会员
2016/6/29 21:13:19
35楼: 没有上QQ群习惯,算了吧。下面这段发在Intraweb笔记上,也放在这里。走过路过,不要错过。

用Delphi做网页开发经历的三个阶段:
第一阶:傻干阶段
使用Intraweb,傻瓜型,无需知道javascript,html,css,会pascal就可以了。

第二阶:困惑阶段
使用Intraweb,有很多限制,比如资料少,界面不容易做漂亮,没有源代码等等。于是转向研究其他开发工具。首先吸引眼球的是Nodejs,前后台用一种语言Javascript,爽,运行速度也不赖。
随着PHP7的发布,注意力也被PHP7的高性能所吸引,玩了一阵PHP7。当然还有以前摸过的Tomcat/asp.net,各种框架一大堆。还有,也许是未来方向的Rust语言(无视GO),这方面有Iron/nickel。
玩着玩着,还是发现问题了。PHP/Nodejs,解释执行,无法编译,一点隐私都没有。虽然PHP足够稳定,速度也不错,还是放弃吧。尼玛的微软,PHP7发布了,你赶紧提供PHP7的驱动啊,我要用PHP7来连接SQL Server。微软:“哈哈,你等着吧,迟早会有的。”别说Laravel好,源代码一大堆,资料一大箩,读死你。Nodejs,后面的依赖一大堆,出点问题。你找去吧,你结交的朋友太多,谁知道哪个朋友出卖了你。
Tomcat是一个不错的选择,企业级,开源,各种框架你随便挑,稳定性没有问题,喜欢高价语言的还有Scala可玩;自动生成代码的也有,比如jeecg,连微信的开发都有了。尼玛的jeecg,害死人,自动生成的代码你改得了吗,客户今天有这个需求,明天有那个需求,除非jeecg是你写的,你想改就改。最让人受不了的是tomcat的速度,同样功能的程序,PHP都跑到半山腰了,那只公猫还在山脚下晃晃悠悠。

大姑娘,小媳妇,外面的野花你随便采。采过之后你发现,还是家花好。

第三阶:回归阶段
于是有了:WYSIWYG WebBuilder + Delphi 开发Web应用的最佳搭档(http://bbs.2ccc.com/topic.asp?topicid=512086)
我一直纳闷:Delphi这么好的语言,性能直逼C++,完全的Native Code,在Web开发这块领地,咋就没有数得着的成功案例?
其实大家将最好的东西忽略了,这就是WebBroker,因为大家把聚光灯都照在了IntraWeb上。结果IntraWeb是个不争气的孩子,做前端没有框架,一点艺术细胞都没有;做后端没有性能,Indy的框架显然满足不了当下高并发高速度的网络需求。要是不研究mORMot,还不知道用Delphi也可以写http.sys应用。不研究http.sys,就不知道IIS如此牛逼,不知道IIS的好,就不会去研究ISAPI。一研究ISAPI,你才发现,原来Delphi7的时代,WebBroker就已经IOCP了。

后台WebBroker,性能与稳定性建立在ISAPI基础上,站在巨人的肩膀上,你还怕没有好戏看吗?就差前台工具了。
前台我选WYSIWYG WebBuilder,这个东西你越用越喜欢,可以与WebBroker“狼狈为Jian”,帮WebBroker补全开发页面缺少所见即所得需要的工具。
WebBroker与WebBuilder的粘合剂就是javascript+AJAX/AJAJ,将javascript发扬光大的是jQuery,当然还有Angular/React。
前端完全采用html文件,负责页面展示,是"View",后端只负责json数据提供(当然json数据中没有规定你不能写html元素),负责读写数据库,是"Model"。"Control"在哪里?前后都有,前端是javascript写的引导程序,页面一启动,首先向后端发起ajax请求,接到后端的返回数据后负责对页面加工。肖老尸告诉你,这就是Intraweb的玩法,后端不光返回数据,也可以返回运行指令,一段javascript代码片段,让浏览器来执行。有兴趣的朋友,可以仔细研究我在“最佳搭档”开篇中那段javascript代码,那里有文章。

别告诉我IW也可以写ISAPI,尼玛IW,代码锁在自己的抽屉里,就等着发霉吧。request居然不能操作RawContent,只能解析x-www-form-urlencoded与multipart/form-data格式编码数据,如果前端直接往后端发送application/json或者text/xml编码数据,IW歇菜了。你只会炖猪肉,给你牛排你不知道如何加工,那你倒是把收到的牛排拿出来呀,尼玛的,你解析不了,又把原材料锁起来,我如何招待特需客户。

IW重写ISAPI,提升性能?性能在哪里,性能在Bill Gates那里,IIS才是性能之源。用IW 58版写一个Win10下64位的ISAPI,浏览器收到404错误,不知道问题出在哪里。人家Berlin版的WebBroker一点毛病都没患(不是没有哦)。你只用Delphi来写restFul Sevice,你是选择没有源代码,附加功能一大堆的IW,还是选择提供全部源代码,轻量级的WebBroker呢?WebBroker没有Session,Session那点事,根本就不是事,自己来。自己生的娃,出了问题自己才好教。
----------------------------------------------
-
作者:
男 tonzi (tonzi) ★☆☆☆☆ -
普通会员
2016/6/30 9:44:45
36楼: @c5soft
这个你试过了吗?开源……
DelphiMVCFramework is a powerful RESTful framework used also for website development https://github.com/danieleteti/delphimvcframework

DMVCFramework features
•RESTful (RMM Level 3) compliant
•Fancy URL with parameter mappings
•Server side generated pages using Mustache templates
•Messaging extension using STOMP and Apache ActiveMQ or Apache Apollo (beta)
•Can be used in load balanced environment using Redis or MySQL as state server
•Integrated RESTClient
•Works with DelphiXE3 or better
•Integrated Logging System
•It is really simple to use. You can be productive in minutes!

Here's the DMVCFramework Developers Guide https://danieleteti.gitbooks.io/delphimvcframework/content/

If you need support, there is the official facebook group with more than 600 users https://www.facebook.com/groups/delphimvcframework/
----------------------------------------------
-
作者:
男 c5soft (大道至简) ▲▲▲▲▲ -
普通会员
2016/6/30 11:12:07
37楼: 这个没用过,抽空研究一下。
----------------------------------------------
-
作者:
男 ww66 (wzs) ★☆☆☆☆ -
普通会员
2016/6/30 15:31:39
38楼: c5soft 让我们佩服的人,多谢!
----------------------------------------------
http://www.inteLw.cn:8077
作者:
男 c5soft (大道至简) ▲▲▲▲▲ -
普通会员
2016/7/13 20:06:07
39楼: 已将原来Intraweb的部分项目移植到WebBroker新框架下,放在IIS 7 生产环境接受考验。
新框架考验你的是javascript的编程能力,pascal代码核心是Session管理。
Session管理是个难点,测试中冒出的bug多与session有关。

特点:
  1.后端支持高并发,并支持多服务器负载平衡,为大系统而生;
  2.后端Native Code,速度一定比PHP/Nodejs/ASP.NET/Tomcat快;
  3.后端微框架,逻辑非常简单,调试也很容易;
  4.前端页面使用所见所得页面生成工具,效率很高。
  5.前端页面生成的完全是HTML+CSS+Javascript,能控制到任何细节。
----------------------------------------------
-
作者:
男 xuyb19870303 (xuy) ▲▲▲△△ -
普通会员
2016/7/13 21:32:22
40楼: 非常期待肖老尸能给几个小例子学习下!
----------------------------------------------
-
作者:
男 sun2016 (sun) ▲▲▲△△ -
普通会员
2016/7/31 10:44:27
41楼: 非常期待肖老尸能给几个小例子学习下!
----------------------------------------------
学Delphi不久,会问些初级问题,希望有人指引,不胜感激...
作者:
男 llf (天天打) ★☆☆☆☆ -
盒子活跃会员
2016/8/23 16:32:21
42楼: 非常期待肖老尸能给几个小例子学习下!
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行230.4688毫秒 RSS