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. django --01 helloworld样例入门

    很好的一个django教程:https://www.w3cschool.cn/django/django-first-app.html django版本:1.8 1.创建django工程 django ...

  2. PASCAL 的开源工具

    PASCAL 的开源工具: 1)free pascal  代码编译器     http://www.freepascal.org/ 2)lazarus 图形界面开发工具   http://www.la ...

  3. error: commit is a merge but no -m

    https://segmentfault.com/q/1010000010185984 执行git cherry-pick commitID操作时报错,如题 原因是合并的commitID做过merge ...

  4. hdu 1244 DP

    水DP dp[i%2][j]=Max(dp[i%2][j-1],dp[1-i%2][j-l[i]]+sum[j]-sum[j-l[i]]); #include "stdio.h" ...

  5. kafka 学习之初体验

    学习问题: 1.kafka是否需要zookeeper?2.kafka是什么?3.kafka包含哪些概念?4.如何模拟客户端发送.接受消息初步测试?(kafka安装步骤)5.kafka cluster怎 ...

  6. iOS:分页控件UIPageControl的使用

    分页控件:UIPageControl   功能:通常搭配滚动视图一起使用,设置pagingEnabled=YES即可,UIScrollView会被分割成多个独立页面,用户的滚动体验则变成了页面翻转,一 ...

  7. 兄弟连新版Linux视频教程

    兄弟连新版Linux视频教程目录:F:\linux\兄弟连新版Linux视频教程├(1)云计算是什么东西集群又是嘛玩意?.mp4├(2)兄弟连新版Linux教程 1.1.1 Linux系统简介-UNI ...

  8. Maven nexus 安装nexus私服出现的两个问题

    1. 在win10中安装nexus时提示:wrapper | OpenSCManager failed - 拒绝访问. (0x5) 主要是没有权限.需要以管理员的身份运行 如果你是直接点击 start ...

  9. [AngularJS] $interval

    $interval provides an excellent service for timed operations in your AngularJS apps. It has the adva ...

  10. Python函数:使用谷歌翻译翻译英语字符串

    代码是同事写的,我把它单独抠出来,可以作为工具函数使用.当然,性能还是个问题,有待解决. import random import cookielib import urllib import url ...