设为首页 收藏本站
查看: 518|回复: 0

[经验分享] php调用.Net WebService消息序列化及性能测试

[复制链接]

尚未签到

发表于 2017-4-7 08:07:56 | 显示全部楼层 |阅读模式
作者:敖士伟

索 引
一、环境
二、代码
三、测试结果
四、结果分析
  

  说明:php调用.net WebService,解决返回消息格式问题,比如数据库查询结果。本方案将.net DataTable序列化为JSON返回给php,php使用json_decode()解码JSON数据为数组。



一、环境
1. dotNet环境
Win2003EE sp2,IIS 6.0,.NET 3.5 sp1
2.PHP环境
CentOS 6.2, Apache 2.2.21, PHP 5.3.8, APC 3.1.9,mysql 5.5.16
PHP和mysql在同一server上
3.测试工具
Apache ab.exe


二、代码
注:mysql连接都使用持久连接
1.dotNet代码
        [WebMethod]public string dsMysql(){DataSet dataset = new DataSet();MySqlConnection conn = new MySqlConnection("Database=test;User Id=root;Password=ikmbikmb;Data Source=192.168.1.121;Port=3306;Pooling=true;Max Pool Size=10;Min Pool Size=1");MySqlDataAdapter adapter = new MySqlDataAdapter();adapter.SelectCommand = new MySqlCommand("SELECT * FROM t1", conn);adapter.Fill(dataset);JSON_Class Object_JSON_Class = new JSON_Class();string tb = Object_JSON_Class.CreateJsonParameters(dataset.Tables[0]);return tb;}
2.php代码
(1)直接查询mysql代码<?php$link = mysql_pconnect("192.168.1.121", "root", "ikmbikmb")or die("Could not connect : " . mysql_error());mysql_select_db("test") or die("Could not select database");$query = "SELECT * FROM t1";$result = mysql_query($query) or die("Query failed : " . mysql_error());print "<table>\n";while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {print "\t<tr>\n";foreach ($line as $col_value) {print "\t\t<td>$col_value</td>\n";}print "\t</tr>\n";}print "</table>\n";mysql_free_result($result);mysql_close($link);?>
(2)调用WebService代码<?php$objSoapClient = new SoapClient("http://192.168.1.119/Service1.asmx?WSDL");$out=$objSoapClient->dsMysql();$json=$out->dsMysqlResult;$t=json_decode($json, true);$t=$t['Head']; print "<table>\n";foreach ($t as $line) {print "\t<tr>\n";foreach ($line as $col_value) {print "\t\t<td>$col_value</td>\n";}print "\t</tr>\n";}?>
三、测试结果
说明:只列出结果关键参数

1.第一组测试10个并发
(1)直接查询
Requests per second:  334.20 [#/sec] (mean)
Time per request:    29.922 [ms] (mean)
Time per request:    2.992 [ms] (mean, across all concurrent requests)
Transfer rate:     133.87 [Kbytes/sec] received

(2)调用WebService
Requests per second:  184.51 [#/sec] (mean)
Time per request:    54.197 [ms] (mean)
Time per request:    5.420 [ms] (mean, across all concurrent requests)
Transfer rate:     72.39 [Kbytes/sec] received

2.第二组测试50个并发
(1)直接查询
Requests per second:  318.36 [#/sec] (mean)
Time per request:    157.053 [ms] (mean)
Time per request:    3.141 [ms] (mean, across all concurrent requests)
Transfer rate:     127.99 [Kbytes/sec] received

(2)调用WebService
Requests per second:  182.86 [#/sec] (mean)
Time per request:    273.427 [ms] (mean)
Time per request:    5.469 [ms] (mean, across all concurrent requests)
Transfer rate:     71.63 [Kbytes/sec] received

四、结果分析
直接查询比调用WebService大概快77%
(((334.20+318.36)/2)/((184.51+182.86)/2)-1)*100%
可能的原因:
1. 调用WebService增加了网络连接成本
2. 调用WebService在.net端和php都增加了对象的序列化计算成本

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-361219-1-1.html 上篇帖子: 2011年最热门的开源PHP项目回顾 下篇帖子: 在PHP中使用功能强大的FCKeditor
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表