DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: yzn_an
今日帖子: 0
在线用户: 1
导航: 论坛 -> 文档资料 斑竹:liumazi,ruralboy  
作者:
男 c5soft (大道至简) ▲▲▲▲△ -
注册会员
2016/6/7 17:58:35
标题:
Delphi语言最好的JSON代码库 mORMot学习笔记1 浏览:21926
加入我的收藏
楼主: 在进行网络编程中需要JSON对象的构建与解析,
这个Delphi XE+自带:
{$IF CompilerVersion>22}, System.JSon{$ELSE}, DBXJSON{$IFEND}
不过,不好用,大家更喜欢SuperObject。我本人以前一直用JsonDataObjects。
今天要给大家介绍的这套JSON代码库算是“世外高人”,身怀绝世武功,而默默无闻,这就是 mORMot 系列开发框架。这是一个功能超级强大,学习曲线壁陡的开源框架。

http://synopse.info/

Project Name:  Synopse mORMot Framework
Document Name:  Software Architecture Design
Document Revision:  1.18
Date:  May 27, 2016
Project Manager:  Arnaud Bouchez

这是PDF文档下载地址:
http://synopse.info/files/pdf/Synopse%20mORMot%20Framework%20SAD%201.18.pdf
信息量达到惊人的2127页。大部分人被这份文档吓到,以至于错过了修炼这套“绝世武功”的机会。
今天咱们从中把JSON编程单拣出来,看看mORMot有什么神奇的地方。
使用mORMot没有想象的那样难,使用JSon只需要引用一个文件synCommons。下面我们来看代码,将SuperObject与mORMot做一个对比:

const cstMaxTest = 100000;

procedure TForm1.TestSO;
var jo: ISuperObject; i: Int64; sw: TStopWatch;
begin
  sw := TStopWatch.Create;
  jo := SO();
  i := 0;
  while i < cstMaxTest do begin
    jo.S['Name'] := 'This is a Str' + IntToStr(i);
    jo.I['Age'] := i;
    jo.O['List'] := SO('[1,"Hello",5,{"name":"c5soft","age":50}]');
    if i = 100 then
      Log('SO:' + jo.AsJSon());
    inc(i);
  end;
  Log('SuperObject: ' + sw.Stop());
  sw.free;
end;

procedure TForm1.TestMJ;
var jo: Variant; i: Int64; sw: TStopWatch;
begin
  TDocVariant.New(jo); ;
  sw := TStopWatch.Create;
  i := 0;
  while i < cstMaxTest do begin
    jo.Name := 'This is a Str' + IntToStr(i);
    jo.Age := i;
    jo.List:=_JSon('[1,"Hello",5,{"name":"c5soft","age":50}]');
    if i = 100 then
      Log('MJ:' + VariantSaveJSON(jo));
    inc(i);
  end;
  Log('mORMot JS: ' + sw.Stop());
  sw.free;
end;

做一个10万次的测试,这是输出结果:
SO:{"Age":100,"Name":"This is a Str100","List":[1,"Hello",5,{"age":50,"name":"c5soft"}]}
SuperObject: 00:01.561
MJ:{"Name":"This is a Str100","Age":100,"List":[1,"Hello",5,{"name":"c5soft","age":50}]}
mORMot JS: 00:00.326

发现了吧,mORMot比SuperObject快太多,干同样的活,SuperObject用的时间是mORMot的5倍。
使用mORMot还用另外两个好处:
其一、用jo.Name代替jo.S['Name']更直观
其二、在调试阶段设置断点,观察jo的值,delphi告诉你:{"Name":"This is a Str100","Age":100,"List":[1,"Hello",5,{"name":"c5soft","age":50}
而你去跟踪SuperObject的jo,Delphi只能告诉你那是一个对象,具体值是多少,她说“太复杂,一言能尽”,结果什么也看不到。

下期预告:windows下构建http服务,放弃indy(intraweb),改用iocp(diocp)吗?错了!用http.sys才是王道,这一切mORMot已经悄悄地为我们准备好了。
此帖子包含附件:
JPEG 图像
大小:24.8K
----------------------------------------------
-
作者:
男 brh616 (风风风) ★☆☆☆☆ -
盒子活跃会员
2016/6/7 18:29:43
1楼: To be continued按此在新窗口浏览图片
----------------------------------------------
风风风
作者:
男 ldmmig (ldm) ★☆☆☆☆ -
盒子活跃会员
2016/6/7 18:32:04
2楼: 我刚把服务换成http.sys
----------------------------------------------
-
作者:
男 vmao (毛小毛) ★☆☆☆☆ -
盒子活跃会员
2016/6/7 19:16:58
3楼: 好的,是时候尝尝新东西了,期待楼主写续集,有对比才能更直观。
----------------------------------------------
-
作者:
男 mike1234567890 (Mike) ★☆☆☆☆ -
普通会员
2016/6/7 20:21:10
4楼: 好贴子,楼主多发些相关的内容吧
----------------------------------------------
-
作者:
男 c5soft (大道至简) ▲▲▲▲△ -
注册会员
2016/6/7 20:51:08
5楼: @ldmmig (ldm):
用的是什么框架?
----------------------------------------------
-
作者:
男 michaelacu (M哥) ▲▲▲△△ -
注册会员
2016/6/7 21:23:55
6楼:  专门登录收藏,楼主好样的
----------------------------------------------
-
作者:
男 c5soft (大道至简) ▲▲▲▲△ -
注册会员
2016/6/7 21:26:06
6楼: 随便做一下JsonDataObject的测试,因为JsonDataObject是基于UnicodeString的,改用Berlin编译,运行结果如下:
SO:{"Age":100,"Name":"This is a Str100","List":[1,"Hello",5,{"age":50,"name":"c5soft"}]}
SuperObject: 00:00.880
JD:{"Name":"This is a Str100","Age":100,"List":[1,"Hello",5,{"name":"c5soft","age":50}]}
JsonDataObject: 00:00.084
MJ:{"Name":"This is a Str100","Age":100,"List":[1,"Hello",5,{"name":"c5soft","age":50}]}
mORMot JS: 00:00.170
这回JsonObject胜出,比mORMot节省一半的时间。这个结果与前面的是同一台电脑上跑出来的结果,前面的是Delphi7编译的,可见berlin编译出来的代码运行速度比delphi7快了差不多1倍。
----------------------------------------------
-
作者:
男 c5soft (大道至简) ▲▲▲▲△ -
注册会员
2016/6/7 21:26:59
7楼: JsonDataObject的代码这样写:
procedure TForm1.TestJD;
var jo: TJSonObject; i: Int64; sw: TStopWatch;
begin
  sw := TStopWatch.Create;
  jo := TJSonObject.Create;
  i := 0;
  while i < cstMaxTest do begin
    jo.S['Name'] := 'This is a Str' + IntToStr(i);
    jo.I['Age'] := i;
    jo.A['List'] :=TJSonArray(TJSonObject.Parse('[1,"Hello",5,{"name":"c5soft","age":50}]'));
    if i = 100 then
      Log('JD:' + jo.ToJSon());
    inc(i);
  end;
  Log('JsonDataObject: ' + sw.Stop());
  jo.Free;
  sw.free;
end;
----------------------------------------------
-
作者:
男 c5soft (大道至简) ▲▲▲▲△ -
注册会员
2016/6/7 21:33:23
8楼: 上面是32Bit的测试结果,再跑一个64bit的:
SO:{"Age":100,"Name":"This is a Str100","List":[1,"Hello",5,{"age":50,"name":"c5soft"}]}
SuperObject: 00:01.291
JD:{"Name":"This is a Str100","Age":100,"List":[1,"Hello",5,{"name":"c5soft","age":50}]}
JsonDataObject: 00:00.104
MJ:{"Name":"This is a Str100","Age":100,"List":[1,"Hello",5,{"name":"c5soft","age":50}]}
mORMot JS: 00:00.169

SO:{"Age":100,"Name":"This is a Str100","List":[1,"Hello",5,{"age":50,"name":"c5soft"}]}
SuperObject: 00:01.288
JD:{"Name":"This is a Str100","Age":100,"List":[1,"Hello",5,{"name":"c5soft","age":50}]}
JsonDataObject: 00:00.116
MJ:{"Name":"This is a Str100","Age":100,"List":[1,"Hello",5,{"name":"c5soft","age":50}]}
mORMot JS: 00:00.169



可见64位的系统不比32位快。SuperObject的64位版本慢了接近1倍。
----------------------------------------------
-
作者:
男 c5soft (大道至简) ▲▲▲▲△ -
注册会员
2016/6/7 22:03:47
9楼: 刚才的测试结果有误,没有考虑调试状态,重新跑一遍:
Berlin Debug Mode
SuperObject: 00:01.150
mORMot JS: 00:00.627

Berlin Release Without Debug
SuperObject: 00:00.909
mORMot JS: 00:00.193


Delphi7 Debug Mode
SuperObject: 00:01.606
mORMot JS: 00:00.325

Delphi7 Release Without Debug
SuperObject: 00:01.141
mORMot JS: 00:00.189

正确结论是delphi7编译出来程序的速度实际更快一些。再看看exe大小,delphi7做出来的500K,Berlin做的2200K, 64位的就更夸张了,3600K。用delphi开发,仅在windows上跑,停留在delphi7/2007版应该是一个理性的选择。
这不得不说mORMot的好,mORMot让咱们仅用delphi7就完全支持unicode,为此从底层做起,整个框架完全采用UTF8编码,也可以在free pascal下编译,在linex下跑。这里批评一下RealThinClient,连ANSI编码都只做了单字节的,看来压根儿没打算离开欧美。

附测试代码:
此帖子包含附件:c5soft_201667224418.zip 大小:83.3K
----------------------------------------------
-
作者:
男 pwhll (渭水阳) ★☆☆☆☆ -
盒子活跃会员
2016/6/7 22:46:36
10楼: 楼主经测试发现synCommons.pas 只这一个文件还是不行,还需要Synopse.inc,SynopseCommit.inc,SynLZ.pas这三个文件,我是在Xe下测试的,更多的功能有待发现
----------------------------------------------
-
作者:
男 c5soft (大道至简) ▲▲▲▲△ -
注册会员
2016/6/7 23:14:34
11楼: 楼上补充得很好,我前文说的是"只需要引用一个文件synCommons",实际上synCommons还会拉进来几个文件,GExpert中有一个工具,叫“Project Dependencies"很好用:
此帖子包含附件:
JPEG 图像
大小:73.7K
----------------------------------------------
-
作者:
男 c5soft (大道至简) ▲▲▲▲△ -
注册会员
2016/6/7 23:36:33
12楼: 啥叫“Cross-cutting" ?
mORMot的文档中多次出现Cross-cutting,这是那种非常简单,又非常难懂的英语词汇。Cross-cutting就是completely cutting, 比如用小刀切西瓜,是完全切开,不是切下一点点,或者切一半。引申为“贯彻始终”的意思。Cross-cutting的东西就是mORMot各个模块都要用到的东西,函数、结构、对象等等,是基础性的东西。比如SynCommons.pas、SynLog.pas、SynTests.pas就属于Cross-cutting性质的单元,而rawUTF8属于Cross-cutting性质的数据类型。用Cross-cutting来说切西瓜,指的不是那瓜,而是那刀;也不是那刀,而是那刀的动作;也不是那动作,而是那动作的气势。
----------------------------------------------
-
作者:
男 vga (vga) ★☆☆☆☆ -
盒子活跃会员
2016/6/8 6:34:09
13楼: “Cross-cutting" 劈开 怎样?
----------------------------------------------
-
作者:
男 c5soft (大道至简) ▲▲▲▲△ -
注册会员
2016/6/8 7:05:54
14楼: 劈开应该是crossing cutted
----------------------------------------------
-
作者:
男 ldmmig (ldm) ★☆☆☆☆ -
盒子活跃会员
2016/6/8 7:26:21
15楼: @c5soft
就是mORMot
----------------------------------------------
-
作者:
男 ldmmig (ldm) ★☆☆☆☆ -
盒子活跃会员
2016/6/8 8:36:16
16楼:
用ab测试例子synopse mORMot\trunk\SQLite3\Samples\09 - HttpApi web server

,超过1000并发,必挂。
----------------------------------------------
-
作者:
男 lzd123 (昨夜清风) ★☆☆☆☆ -
盒子活跃会员
2016/6/8 9:05:06
17楼: 支持,等待http.sys的精彩出场!!!
----------------------------------------------
向你学习
作者:
男 newsxy (呼呼) ★☆☆☆☆ -
盒子活跃会员
2016/6/8 9:24:30
18楼: 记号关注
----------------------------------------------
-
作者:
男 c5soft (大道至简) ▲▲▲▲△ -
注册会员
2016/6/8 11:35:14
19楼: D:\Dev\Lib\SQLite3\Samples\09 - HttpApi web server>ab -n50000 -c10000 http://localhost/hello
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Completed 50000 requests
Finished 50000 requests


Server Software:        Synopse
Server Hostname:        localhost
Server Port:          80

Document Path:          /hello
Document Length:        38 bytes

Concurrency Level:      10000
Time taken for tests:   21.768 seconds
Complete requests:      50000
Failed requests:        0
Write errors:          0
Total transferred:      15750000 bytes
HTML transferred:       1900000 bytes
Requests per second:    2297.00 [#/sec] (mean)
Time per request:       4353.503 [ms] (mean)
Time per request:       0.435 [ms] (mean, across all concurrent requests)
Transfer rate:          706.60 [Kbytes/sec] received

Connection Times (ms)
          min  mean[+/-sd] median   max
Connect:        0    0   0.3      0      15
Processing:  1569 4086 751.4   4496    4627
Waiting:      404 2131 1067.8   2018    4205
Total:       1569 4086 751.4   4496    4627

Percentage of the requests served within a certain time (ms)
  50%   4496
  66%   4582
  75%   4594
  80%   4596
  90%   4606
  95%   4615
  98%   4621
  99%   4623
 100%   4627 (longest request)

D:\Dev\Lib\SQLite3\Samples\09 - HttpApi web server>pause
请按任意键继续. . .

这是:ab -n50000 -c10000 http://localhost/hello ;输出结果
并发数设置为1万,我还想做一个2万并发,ab先崩溃,干不了。我笔记本风扇转得飞快。先前做diocp还有不少fail, http.sys一个错误也没有,微软的东西是靠得住的。
----------------------------------------------
-
作者:
男 ldmmig (ldm) ★☆☆☆☆ -
盒子活跃会员
2016/6/8 11:35:16
19楼: 去掉任何处理代码,只返回一个字符串的测试结果,自己看附件。
此帖子包含附件:
PNG 图像
大小:13.9K
----------------------------------------------
-
作者:
男 zoujun3281 (无奈) ▲▲▲▲△ -
注册会员
2016/6/8 22:59:37
20楼: 收藏
----------------------------------------------
delphi你妹
作者:
男 mickeylan (牧龙鼠) ★☆☆☆☆ -
普通会员
2016/6/9 11:20:33
21楼: 神器呀,楼主辛苦了!
----------------------------------------------
-
作者:
男 c5soft (大道至简) ▲▲▲▲△ -
注册会员
2016/6/9 14:41:43
22楼: 上面19楼,仅让服务器返回<html><body>Hello World!</body></html>这样简单的页面。这回让服务器返回一个真实的页面,页面接近14K,内含有多个css、js、jpg连接,下面是测试结果:

ab -n100000 -c10000 http://localhost/index.html

Document Path(文档路径):          /index.html
Document Length(请求文档大小):        13812 bytes 

Concurrency Level(并发数):      10000
Time taken for tests(测试耗费时间):   51.937 seconds
Complete requests(总的请求数):      100000
Failed requests(失败请求数):        0
Write errors:          0
Total transferred:      1405200000 bytes
HTML transferred:       1381200000 bytes
Requests per second(每秒请求数(平均)):    1925.42 [#/sec] (mean)
Time per request(每次并发请求时间(所有并发)):       5193.685 [ms] (mean)
Time per request(每一请求时间(单个并发)):       0.519 [ms] (mean, across all concurrent requests)
Transfer rate(传输速率):          26421.81 [Kbytes/sec] received

Connection Times (ms)
          min  mean[+/-sd] median   max
Connect:        0    0   0.4      0       8
Processing:  1648 5032 709.1   5241    5889
Waiting:      944 2487 536.5   2439    3985
Total:       1648 5032 709.1   5241    5889

Percentage of the requests served within a certain time (ms)
  50%   5241
  66%   5279
  75%   5298
  80%   5317
  90%   5420
  95%   5675
  98%   5798
  99%   5830
 100%   5889 (longest request)
----------------------------------------------
-
作者:
男 edwinyeah (Edwin) ★☆☆☆☆ -
盒子活跃会员
2016/6/9 15:43:18
23楼: mORMot,从提供的例子开始学习,其实很简单。
关于文档,是很丰富,但是作者是法国人,英语书写流畅程度一般般,读起来不舒服,但是能懂。

mORMot,通过FreePascal/Lazarus,Linux的支持已经很全面,包括Intel 32bit/64bit,和ARM CPU的 32/64位。详见:http://blog.synopse.info/post/soaarmfpc
----------------------------------------------
-
作者:
男 c5soft (大道至简) ▲▲▲▲△ -
注册会员
2016/6/9 16:08:04
23楼: 构建与IIS相同处理能力的http服务器 mORMot学习笔记2
上面的测试大家已经看到了,用delphi写的http服务器,能够承受10000个并发连接。这是一台i7-2640 双核四线程 主频2.8G,16G内存,配SSD硬盘,Win10 64位的笔记本电脑上的测试结果。

如此强悍、如此稳定,应该不会输给Apache(httpd),甚至可以与Nginx一决高下。 这就是mORMot为咱们搞delphi开发带来的福音。
mORMot中的http服务模块有两个选择,对于windows(xp sp2以上版本),调用iis相同的http.sys内核,当http.sys服务不存在(老win系统或者linux)采用与iocp相同模式,完全用delphi语言写的一个http服务。

这是百度百科对http.sys的介绍
http://baike.baidu.com/link?url=OB-SOKR-NLmxq4nyaSJAmpKdJYCV0u3a3X2JNuSLdz5OfhjbWAzduK43a-P7BZ7LSRcYsy7p0tq3cPUg1CrONK

一句号,调用http.sys,你的程序就具备了提供与iis相同能力的http服务,健壮、稳定、支持高并发。而你不需要安装并启动iis服务器。站在巨人的肩膀上,你就具备了巨人的能力。
----------------------------------------------
-
作者:
男 c5soft (大道至简) ▲▲▲▲△ -
注册会员
2016/6/9 16:26:37
24楼: mORMot的作者是一位软件工程领域的大师,但不是一个会讲故事故事的人,也就不是一个好老师。这么好的产品,这么厚重的文档,却没有让自己的产品“火”起来。

微软http api说明书地址:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa364622(v=vs.85).aspx
----------------------------------------------
-
作者:
男 744840146 (744840146) ▲▲▲▲△ -
注册会员
2016/6/9 17:01:55
25楼: 玩mORMot有一段时间了,我觉得最好用的有以下几点:

1 SYNDB中的TSQLDBConnectionProperties,指定参数后自动建立带池的数据连接服务,支持sqlite,oracle,odbc,jet,另外提供uni,zeos,firedac,bde,nexus连接进行转化。

2 TSQLDBConnectionProperties+SynDBRemote中的TSQLDBServerHttpApi或者TSQLDBServerSockets,直接把数据转化成http访问,客户端TSQLDBSocketConnectionProperties进行连接后,使用SynDBMidasVCL中的TSynDBDataSet就可以直接完成http的三层系统。TSynDBDataSet就是继承的tclientdataset,ClientDataset使用的方便,强大,不用质疑。例子21,例子中没有使用TSynDBDataSet,如下图所示。


3 SynCrossPlatformJSON中的TJSONVariantData提供跨平台的JSON支持,速度比SuperObject,XSuperObject,QJson都快,例子25,要安装其它几个库并打开编译开关。例子25。

4 websocket通讯,例子31。

最后一点,要看mORMot的强大,最好是编译例子15,打开编译开关,看看真正的实力。
此帖子包含附件:
PNG 图像
大小:54.8K
----------------------------------------------
-
作者:
男 744840146 (744840146) ▲▲▲▲△ -
注册会员
2016/6/9 17:11:27
26楼: 有一个最大不是幸是 跨平台支持的是FPC,而不是支持FMX的android,IOS
----------------------------------------------
-
作者:
男 wr960204 (武稀松) ★☆☆☆☆ -
盒子活跃会员
2016/6/9 17:39:14
27楼: SuperObject用了接口,生存期不需要关心.就这一点我就舍不得它啊
----------------------------------------------
武稀松http://www.raysoftware.cn
作者:
男 c5soft (大道至简) ▲▲▲▲△ -
注册会员
2016/6/9 18:02:36
28楼: mORMot 中JSON使用的是Variant,生存期由编译器自动管理,也不需要手动free。
----------------------------------------------
-
作者:
男 c5soft (大道至简) ▲▲▲▲△ -
注册会员
2016/6/9 20:30:38
29楼: Configure the HTTP traffic on your local machine. A nice alternative for netsh http.

http://www.codeproject.com/Articles/437733/Demystify-http-sys-with-HttpSysManager
----------------------------------------------
-
作者:
男 yxsoft (yxsoft) ★☆☆☆☆ -
盒子活跃会员
2016/6/9 21:00:18
30楼: 先收藏吧,感觉很牛的样子
----------------------------------------------
Great!
作者:
男 c5soft (大道至简) ▲▲▲▲△ -
注册会员
2016/6/9 23:54:12
31楼: LVCL Light VCL(for Delphi 6-7 only) mORMot学习笔记3

LVCL是对VCL的精简,是mORMot带给Delphi6/7使用者的又一个小小的惊喜,如果仅用简单的用户界面,编译后的非压缩的exe文件大小只有几十KB,与KOL有一拼,而易用性却比KOL强得多。demo编译后的大小是58K,用aspack压缩后是33K。看看LVCL支持哪些控件:
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    Edit1: TEdit;
    Button1: TButton;
    ListBox1: TListBox;
    Memo1: TMemo;
    CheckBox1: TCheckBox;
    GroupBox1: TGroupBox;
    RadioButton2: TRadioButton;
...
要是作为后台服务的控制台,够用了吧。
----------------------------------------------
-
作者:
男 qdamao (qdamao) ★☆☆☆☆ -
普通会员
2016/6/10 1:15:38
32楼: mORMot的作者挺NB的,第一次知道是因为他优化并改进了Delphi运行库的bug,然后borland好像以版权为由不允许他发布源码,从此对borland的作死性有了更深的认识。
----------------------------------------------
-
作者:
男 mochizuki (mochizuki) ▲▲▲▲▲ -
注册会员
2016/6/10 7:53:14
33楼: 嗯,又是一个好东西,感谢楼主
----------------------------------------------
-
作者:
男 go_on (go_on) ★☆☆☆☆ -
盒子活跃会员
2016/6/10 9:14:29
34楼: 第一次知道这个东西,去了解一下,谢谢
----------------------------------------------
www.eudn.cn工程师联合开发网
作者:
男 FengLinYuShu (FengLinYuShu) ★☆☆☆☆ -
盒子活跃会员
2016/6/10 13:19:57
35楼: 学习!好像很NB的样子, MARK一下
----------------------------------------------
-delphi大富翁论坛http://www.delphibbs.com
作者:
男 chonghai (DBlue) ★☆☆☆☆ -
盒子活跃会员
2016/6/10 17:15:51
36楼: 喜欢并欢迎这样的分享。
Delphi虽然小众,但一样可以很精彩。
----------------------------------------------
喜欢Delphi,关注Delphi,愿和广大爱好者交朋友。
作者:
男 err0rc0de (code) ▲▲▲△△ -
注册会员
2016/6/10 18:16:34
37楼: 它不是自带有个json performance比较吗?

mORMot\SQLite3\Samples\25 - JSON performance

看了楼主的测试用例,瞬间感觉你写的示例弱爆了,haha
----------------------------------------------
-
作者:
男 c5soft (大道至简) ▲▲▲▲△ -
注册会员
2016/6/11 22:05:57
38楼: 按此在新窗口浏览图片 弱爆了就对了,谁都看得懂。
哥们,咱不是想做一个全能的测试程序,只想写一段会superobject就能看得懂的mORMot的代码片段,顺便测试一下速度。mORMot的作者已对现有的多种JSON实现做了全面测试,包括QJSon。

http://blog.synopse.info/?q=Benchmarking+json

继续研究http.sys,将微软的httpapi的C语言实例从https://msdn.microsoft.com/en-us/library/windows/desktop/aa364640(v=vs.85).aspx复制粘贴出来,编译通过,在Win10上跑了一下。这段代码是httpapi 1.0的Sample Application,对于如何写http.sys调用程序小有帮助。哪位老兄有httpapi 2.0的用例,愿意请教。
此帖子包含附件:c5soft_201661122557.rar 大小:60.7K
----------------------------------------------
-
作者:
男 zhyhui2008 (huizi) ▲▲▲▲▲ -
注册会员
2016/6/12 8:50:39
39楼: 群主,抓紧时间组建个mORMot交流群,这么好的东西,还开源,让大家都用起来,感觉资料不少,都是英文的,挡住了不少人
----------------------------------------------
-
作者:
男 fangl2010 (fangl) ▲▲▲▲△ -
注册会员
2016/6/12 14:13:26
40楼: 支持https方便吗
----------------------------------------------
-
作者:
男 pherody (pherody) ▲▲▲▲▲ -
普通会员
2016/6/12 16:17:35
41楼: 31 - WebSockets里面的Project31SimpleEchoServer.exe,在浏览器里输入什么地址测试这个是否正常运行?
----------------------------------------------
-
作者:
男 c5soft (大道至简) ▲▲▲▲△ -
注册会员
2016/6/12 19:46:22
42楼: 输入http://localhost:8888/root/TimeStamp
----------------------------------------------
-
作者:
男 744840146 (744840146) ▲▲▲▲△ -
注册会员
2016/6/13 8:53:16
43楼: 直接从资源管理器里打开就可以,这个例子没有添加文件http访问功能,所以只能直接打开Project31SimpleEchoServer.html

支持websocket的浏览器,Chrome,firefox,IE必须是9以上
----------------------------------------------
-
作者:
男 yq97001 (yq97001) ★☆☆☆☆ -
普通会员
2016/6/13 9:36:32
44楼: mORMot 在delphi10.1 berlin里怎么样安装编译?
----------------------------------------------
-
作者:
男 744840146 (744840146) ▲▲▲▲△ -
注册会员
2016/6/13 17:25:31
45楼: mORMot没有控件安装,直接添加到lib路径,

工程中直接添加syncommons,syndb等到uses里
----------------------------------------------
-
作者:
男 coolslob (CoolSlob) ★☆☆☆☆ -
盒子活跃会员
2016/6/13 18:55:57
46楼: 楼主V5


很久没见这样的贴了。
----------------------------------------------
-
作者:
男 coolslob (CoolSlob) ★☆☆☆☆ -
盒子活跃会员
2016/6/13 18:59:02
47楼: LZ, 这么好的帖子,可传世。

建议发到某个blog吧,  盒子这帖子里,真不好阅读。
----------------------------------------------
-
作者:
男 kylix2008 (kylix2008) ★☆☆☆☆ -
普通会员
2016/6/13 21:59:14
48楼: 两三年前了解SQLite3(发布时不带dll)时偶然看到mORMot,感觉好像很牛,一直没时间学。
顶。
----------------------------------------------
-
作者:
男 fangl2010 (fangl) ▲▲▲▲△ -
注册会员
2016/6/13 22:25:51
49楼: 例子09 D7下编译不了 TSockData是哪个单元的
----------------------------------------------
-
作者:
男 xinlnix (xinlnix) ★☆☆☆☆ -
注册会员
2016/6/14 12:45:22
50楼: 官方文档 8.3.7 
By default, all ORM read operations will be run in concurrent mode, and all ORM write operations will 
be executed in blocking mode. This is expected to be both safe and fast, with our internal  SQLite3 
engine, or most of the external databases. 

但是我不认为对 SQL 数据库,写入阻塞模式,又快又安全。写入存在瓶颈。
----------------------------------------------
-
作者:
男 xinlnix