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. JavaScript 时间与日期处理实战:你肯定被坑过

    本部分的知识图谱请参考编程语言知识图谱-时间与日期. 本文JavaScript 时间与日期处理实战:你肯定被坑过从属于笔者的Web 前端入门与最佳实践中 JavaScript 入门与最佳实践系列文章. ...

  2. ORACLE查询表最近更改数据的方法

    修改项目时,涉及到了Oracle中许多表的修改(包括:增加.删除字段,修改注释等).由于开始没有进行记录,造成在上测试机时,忘记了具体修改过哪些表了.后来在网上查找了一些资料,例如: 1.select ...

  3. 【shiro】使用shiro,点击页面请求总是302状态码

    解决方法: 配置shiro中,将要求放过的地址后面加上后缀,这里是.htmls 因为web.xml中配置所有的页面都是放过的

  4. easyui-datagrid列的数据内容过长自动换行

    在datagrid中添加一句,DataGrid属性中的nowrap:false. (默认为true). JS文件: $('#_main_table').datagrid({ method:'get', ...

  5. zxing生成二维码和读取二维码

    当然,首先要导入zxing的jar包. 生成二维码代码: package com.imooc.zxing; import java.io.File; import java.nio.file.Path ...

  6. 离线安装ocp3.11需要注意的事情

    检查阶段 运行部署前检查的时候 # ansible-playbook -vv playbooks/prerequisites.yml 需要看看play recap是否全过,如果不过需要定位原因,反复执 ...

  7. iOS: 常用的宏

    Github地址:https://github.com/XFZLDXF/Macro/blob/master/MacroDefinition.h // // MacroDefinition.h // M ...

  8. linux下使用C++ Json库

    安装Json库 1.下载JsonCpphttp://sourceforge.net/projects/jsoncpp/files/ 2.下载sconshttp://sourceforge.net/pr ...

  9. ones工作流预设

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

  10. WINXP上安装及使用SqlMap之方法

    1.首先下载SqlMap 点击下载.2.其次下载用于Windows系统的Python ……点击这里…… 3.然后安装Python:Python默认安装的路径是“C:\Python”(你也可以修改安装路 ...