Atitit.使用引擎加脚本架构的设计 使用php,js来开发桌面程序。。

1. 引擎加脚本架构 跨平台,桌面与web的优势1

2. 架构桌面引擎(java,c#)2

3. php桌面引擎要点2

3.1. 运行环境:同时支持cs桌面与web方式2

3.2. 界面使用html5+css+js实现2

3.3. Cli接口互操作,与web接口互操作2

3.4. 其他----------流程2

3.4.1. Html5界面确定要是有的后台引擎$parser=php c# java js2

3.4.2. 桌面引擎dispatch3

3.4.3. 使用cli引擎转发到php3

3.4.4. phprun.bat4

3.4.5. Php同时支持web与桌面的参数传递4

3.4.6. 桌面程序$_GET参数的解析,自定义req引擎4

3.4.7. 回调js 通过$callback5

4. 常见问题与最近实践5

4.1. 使用cmd.exe还是直接bat。。5

5. 其他的php桌面程序方案6

6. 参考6

1. 引擎加脚本架构 跨平台,桌面与web的优势

跨平台方面java很不错。但是java需要编译。。如果需要一个桌面程序,需要灵活修改,可以脚本写成的化,就可以考虑引擎加脚本架构 。。。使用php或者js来做桌面后端。。。

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://www.cnblogs.com/attilax/

2. 架构桌面引擎(java,c#)

3. php桌面引擎要点

3.1. 运行环境:同时支持cs桌面与web方式

3.2. 界面使用html5+css+js实现

3.3. Cli接口互操作,与web接口互操作

3.4. 其他----------流程

3.4.1. Html5界面确定要是有的后台引擎$parser=php c# java js

使用dwr引擎转换为http param..

最好可以有个总配置要使用什么引擎,也可以单独页面配置不同的引擎。。

3.4.2. 桌面引擎dispatch

Proj.amazon splider

//供JS调用

public void sendNSCommand(Object message, Object message2, Object message3, Object message4, Object message5, Object message6, Object message7)

{

//  Object[] objs = (Object[])message;

Console.WriteLine(message);

String meth =(String) message;

//p822

string paramsx=((string) message2);

if (paramsx.Contains("$parser"))

{

String r = new php—ParesrX(paramsx).exec().Trim() ;

Map m = new ParamX().urlParams2Map((string)message2);

String callback = (String)m.get("$callback");

String js2 = callback + "('" + r + "');";

WebBrowser webBrowser1 = (WebBrowser)iocx.getBean("webBrowser1");

object[] objects = new object[1];

objects[0] = r;

Object o = webBrowser1.Document.InvokeScript(callback, objects);

Console.WriteLine("==exe js rzt:" + o);

return;

}

3.4.3. 使用cli引擎转发到php

class ParesrX

{

private string meth;

public ParesrX(string meth)

{

// TODO: Complete member initialization

this.meth = meth;

}

internal String exec()

{

Map m =new  ParamX().urlParams2Map(this.meth);

if (((String)m.get("$parser")).Equals("php"))

{

String urlparams = m.serialize();

String cmd = "@qut" + pathx.StartupPath() + "/phprun.bat@qut  @qut" + pathx.StartupPath() + "/com.attilax/api.php@qut  @qut" + urlparams + "@qut";

cmd=cmd.Replace("@qut","\"");

Console.WriteLine(cmd);

String r=    new Cmd().RunCmd(cmd);

return r;

}

return "";

3.4.4. phprun.bat

@d:

@"%~dp0php5.3.10\php.exe"  -c "%~dp0php5.3.10\php.ini"  -f %1  %2  %3

3.4.5. Php同时支持web与桌面的参数传递

/com.attilax/api.php@qut  @qut" + urlparams + "@qut";

Web方式    api.php?urlparams....

3.4.6. 桌面程序$_GET参数的解析,自定义req引擎

if(count($_GET)==0) //cli mode

{

$param=$argv[1];

$GLOBALS["varx"]["argv"]=$argv ;

$_GET=urlParams2Map($param);

$GLOBALS["varx"]["get"]=$_GET ;

}

function   urlParams2Map( $params) {

$o=array();

$a=explode('&',$params);

$GLOBALS["varx"]["a"]=$a ;

$GLOBALS["varx"]["params"]=$params;

foreach( $a as $k2=>$v2 )

{

$a2=explode("=",$v2);

$k=$a2[0];

$v=$a2[1];

$o[$k]=$v;

}

$GLOBALS["varx"]["o"]=$o ;

return $o;

}

3.4.7. 回调js 通过$callback

String callback = (String)m.get("$callback");

String js2 = callback + "('" + r + "');";

WebBrowser webBrowser1 = (WebBrowser)iocx.getBean("webBrowser1");

object[] objects = new object[1];

objects[0] = r;

Object o = webBrowser1.Document.InvokeScript(callback, objects);

4. 常见问题与最近实践

4.1. 使用cmd.exe还是直接bat。。

推荐使用bat方式。。否则cmd.exe

String cmd = "@qut" + pathx.StartupPath() + "/phprun.bat@qut  @qut" + pathx.StartupPath() + "/com.attilax/api.php@qut  @qut" + urlparams + "@qut";

cmd=cmd.Replace("@qut","\"");

正确的方式是,将 /C 后面所有字符,再加上双引号:

对比两段命令,很多人马上就明白为什么了。

因为,这里相当于有两条命令,并且是嵌套的,外面的命令是:

cmd.exe /C "command"

命令是 cmd.exe,两个参数分别是 /C, "command",我们这里的 command 是

5. 其他的php桌面程序方案

php gtk

WinBinder

6. 参考

用PHP开发桌面应用.html

执行 CMD 时,参数加引号常见问题 - 的米-漠石's Blog - 博客频道 - CSDN.NET.html

C#执行DOS命令(CMD命令) - 杨友山 - 博客频道 - CSDN.NET

paip.asp vbs通过CLI命令行调用PHP代码 - attilax的专栏 - 博客频道 - CSDN.NET

paip.执行shell cmd 命令uapi java php python总结 - attilax的专栏 - 博客频道 - CSDN.NET

Atitit.使用引擎加脚本架构的设计 使用php,js来开发桌面程序。。的更多相关文章

  1. U3D 游戏引擎之游戏架构脚本该如何来写

    这篇文章MOMO主要想大家说明一下我在Unity3D游戏开发中是如何写游戏脚本的,对于Unity3D这套游戏引擎来说入门极快,可是要想做好却非常的难.这篇文章的目的是让哪些已经上手Unity3D游戏引 ...

  2. 【转载】U3D 游戏引擎之游戏架构脚本该如何来写

    原文:http://tech.ddvip.com/2013-02/1359996528190113.html Unity3D 游戏引擎之游戏架构脚本该如何来写   2013-02-05 00:48:4 ...

  3. atitit 研发管理 要不要自己做引擎自己实现架构?.docx

    atitit 研发管理 要不要自己做引擎自己实现架构?.docx 1.1. 目前已经有很多引擎了,还要自己做吗??1 1.2. 答案是自己做更好,利大于弊1 2. 为什么要自己做??1 2.1. 从历 ...

  4. Atitit. camel分词器 分词引擎 camel拆分 的实现设计

    Atitit. camel分词器 分词引擎 camel拆分 的实现设计 1. camel分词器1 1.1. 实现的界定符号大写字母小写字母数字1 1.2. 特殊处理 对于JSONObject 多个大写 ...

  5. .NET应用架构设计—重新认识分层架构(现代企业级应用分层架构核心设计要素)

    阅读目录: 1.背景介绍 2.简要回顾下传统三层架构 3.企业级应用分层架构(现代分层架构的基本演变过程) 3.1.服务层中应用契约式设计来解决动态条件不匹配错误(通过契约式设计模式来将问题在线下暴露 ...

  6. .NET应用架构设计—再次了解分层架构(现代企业应用分层架构核心设计元素)

    阅读文件夹: 1.背景介绍 2.简要回想下传统三层架构 3.企业级应用分层架构(现代分层架构的基本演变过程) 3.1.服务层中应用契约式设计来解决动态条件不匹配错误(通过契约式设计模式来将问题在线下暴 ...

  7. atitit.木马病毒webshell的原理and设计 java c# .net php.

    atitit.木马病毒webshell的原理and设计 java c# .net php. 1. 隐蔽性 编辑 WebShell后门具有隐蔽性,一般有隐藏在正常文件中并修改文件时间达到隐蔽的,还有利用 ...

  8. 《程序猿闭门造车》之NBPM工作流引擎 - 项目整体架构

    前言: 又是一年一度的圣诞节,可这关我什么事呢 :( ,好不容易周末了,还是说说NBPM吧,前不久我发布了一篇关于工作流的文章:<程序猿闭门造车>之NBPM工作流引擎 - 开篇,很多爱好工 ...

  9. 高性能页面加载技术--BigPipe设计原理及Java简单实现

    1.技术背景 动态web网站的历史可以追溯到万维网初期,相比于静态网站,动态网站提供了强大的可交互功能.经过几十年的发展,动态网站在互动性和页面显示效果上有了很大的提升,但是对于网站动态网站的整体页面 ...

随机推荐

  1. material design动画

    这是一篇material design 文档动画部分的学习! Summary: Material Design动画交互 动画速度的3个原则 3种交互方式 如何设计有意义的动画 使人高兴的动画细节 1 ...

  2. 实现RecyclerView下拉刷新和上拉加载更多以及RecyclerView线性、网格、瀑布流效果演示

    实现RecyclerView下拉刷新和上拉加载更多以及RecyclerView线性.网格.瀑布流效果演示 效果预览 实例APP 小米应用商店 使用方法 build.gradle文件 dependenc ...

  3. BlackBerry10 开发环境搭建

    最近开始学习BlackBerry10的开发,黑莓10系统是2013年1月30日黑莓公司正式发布的,目前网上资料比较少,这篇博客的内容基本上是按照官网上的文档写的.BlackBerry10目前支持C/C ...

  4. openwrt开源系统LUCI配置界面

    转自:http://www.right.com.cn/forum/thread-131035-1-1.html 本人菜鸟,最近在学习这方面的知识,在参考资料的基础上总结如下内容.这篇文章针对如何对op ...

  5. ones工作流预设

    系统首选项->工作流->新建保存后在工作流设计中将内容复制到编辑器中. 出库流程 支持分批次出库,支持外部单据转化为出库单并在出库结束后通知原始单据 流程图: 模块:storage.sto ...

  6. echarts图形报表缓存问题(option数据缓存)

    这几天我在工作中用到了echarts开发报表.每次查询出来的数据都是新的,但是echart展现的图形报表却还是之前的数据.网上找了搜索了很多次也没能解决,后面加了技术群才解决的. 我开始已经确定是报表 ...

  7. TestNG测试报告美化

    因TestNG自带的测试报告不太美观,可以使用testng-xslt进行美化 1.下载testng-xslt包 2.把/src/main/resources/TestNG-results.xsl放到你 ...

  8. 在weblogic上配置数据源

    转自:http://blog.csdn.net/weijie_search/article/details/2756585 旁白 这是在weblogic9.0+mysql5.1的环境下配置的数据源.其 ...

  9. iOS_Objective-C測试

    1. iOS中程序正常载入UIViewControlle时,下面四个方法哪个最先运行? A.viewVillAppear B.viewDidLoad C.viewDidAppear D.viewWil ...

  10. Spring之替换Bean的返回结果,替换Bean的方法实例

    Spring是一个非常强悍的框架+容器,其中有代理模式(动态代理模式)的极致体现.下面是两个比较让人感觉精彩的代码使用,重点关注main方法中的ClassPathXMlApplicationConte ...