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. 基于Nginx的开墙方案

    Kubernetes集群内部通过服务名能进行相互调用,但如果Kubernetes中的pod需要调用外部服务,而且这些外部服务是属于不同的安全区域,就面临开墙的问题,因为Kubernetes Pod能够 ...

  2. vmware 下 ubuntu 不能全屏显示 的解决方法

    vmware 下 ubuntu 不能全屏显示 在 vmware 下 安装 ubuntu后,默认分辨率是 800 * 600,可以设置以全屏显示: 设置步骤: vmware 下启动 虚拟机,即 启动 u ...

  3. API Monitor---------------Using API Monitor to crack copy protected software

    For this tutorial we will be using Mirial Softphone which is a HD video conferencing application. Th ...

  4. pymongo常见的高级用法

    pymongo是python中基于mongodb数据库开发出来的,比mongoengine要高级一些,也要好用一些. 基本的增删查改就不说了 insert() delete() find() upda ...

  5. flask restful修改头部信息

    有两种方式,第一种是使用make_response from flask import make_response def test(): resp = make_response('test', c ...

  6. 北邮连接bupt-mobile

    内容源自:[伪攻略]电脑(win10)连接BUPT-mobile教程 1.控制面板:控制面板\网络和 Internet\网络连接 右键——属性,记住网络配置器的名字(划线部分) 点击配置——高级——网 ...

  7. log4j实现每一个线程保存一个日志文件

    log4j.properties: ### direct log messages to stdout ### log4j.appender.stdout=org.apache.log4j.Conso ...

  8. ckeditor 触发事件(案例)

    CKEDITOR.instances.positionDesc.on('blur', function() { $("#positionDescMSg").text("& ...

  9. Android技术——在Android中的随意视图中找控件

    1.在非常多情况下,我们可能不知道控件的id,可是我们却希望在包括这个控件的视图中找到它,能够採用例如以下做法: 例:在Activity的根视图中找出当中全部的Button控件 private voi ...

  10. HTTP状态码具体解释

    HTTP状态码(HTTP Status Code)是用以表示网页serverHTTP响应状态的3位数字代码.它由 RFC 2616 规范定义的,并得到RFC 2518.RFC 2817.RFC 229 ...