Atitit.使用引擎加脚本架构的设计 使用php,js来开发桌面程序。。
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 js 2
3.4.2. 桌面引擎dispatch 3
3.4.3. 使用cli引擎转发到php 3
3.4.4. phprun.bat 4
3.4.5. Php同时支持web与桌面的参数传递 4
3.4.6. 桌面程序$_GET参数的解析,自定义req引擎 4
3.4.7. 回调js 通过$callback 5
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://blog.csdn.net/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. 组织结构 软件工厂的组织结 ...
- 模块加载及第三方包:Node.js模块化开发、系统模块、第三方模块、package.json文件、Node.js中模块的加载机制、开发环境与生产环境、cookie与session
1.Node.js模块化开发 1.1 JavaScript开发弊端 JavaScript 在使用时存在两大问题,文件依赖和命名冲突. 1.2 软件中的模块化开发 一个功能就是一个模块,多个模块可以组成 ...
- 壁纸引擎java运行库_Microsoft Windows Desktop Runtime v5.0.0 桌面程序运行库(含常规运行库)...
2020.11.11 微软.NET 5.0 正式版发布! 本次版本更新非常重视 .NET 的统一性,微软希望 .NET Framework 开发者能够迁移他们的代码和应用到 .NET 5.0 上,为明 ...
- 元数据驱动的SaaS架构如何设计
元数据驱动的SaaS架构如何设计 作为业务系统技术开发同学,面向当下:首先应该是快速搭建业务通路,让线上业务跑起来,快速试错,解决生存问题:第二步是在链路通了,业务基本跑起来的基础上如何支撑业务跑更快 ...
- U3D 游戏引擎之游戏架构脚本该如何来写
转载自:http://www.cnblogs.com/softimagewht/p/3916646.html 这篇文章MOMO主要想大家说明一下我在Unity3D游戏开发中是如何写游戏脚本的,对于Un ...
- 跨平台Web Canvas渲染引擎架构的设计与思考(内含实现方案)
这篇文章主要从技术视角介绍下跨平台WebCanvas的架构设计以及一些关键模块的实现方案(以Android为主),限于作者水平,有不准确的地方欢迎指正或者讨论. 设计目标 标准化:Web Canvas ...
- 跨平台Web Canvas渲染引擎架构的设计与思考
简介: 这篇文章主要从技术视角介绍下跨平台WebCanvas的架构设计以及一些关键模块的实现方案(以Android为主),限于作者水平,有不准确的地方欢迎指正或者讨论. 设计目标 标准化:Web Ca ...
- BEPU物理引擎碰撞系统的架构与设计
前面我们讲解了如何监听物理引擎的碰撞事件, 在物理引擎内核中如何架构与设计碰撞规则,使得物理Entity与周围的物理环境产生碰撞时,如何灵活的控制物理碰撞,本节給大家详细的讲解BEPUphysicsi ...
- python游戏开发引擎_基于Python的网络游戏脚本系统的设计与实现
基于 Python 的网络游戏脚本系统的设计与实现 摘要:传统的网络游戏开发采用 c/c++ 实现游戏的逻辑功能,随 着游戏内容越来越丰富以及快速变化的市场需要, c/c ++ 已经不能 满足开发者对 ...
- 《架构真经:互联网技术架构的设计》大道至简
本节书摘来自华章出版社<架构真经:互联网技术架构的设计>一书中的第1章,第1节,作者 小象学院 杨 磊,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 大道至简 ...
最新文章
- 实心和空心哪个抗弯能力强_空心楼板技术优势及施工工艺
- linux之文件基本操作学习笔记
- CompletableFuture CompletableFuture.supplyAsync 异常处理
- httpClient post方法 解析json数据(向服务器传递,接受服务器传递)
- java $.class_java文件编译后额外生成的$1.class是怎么一回事
- 迷你linux设备,ComputeLab发布MintBox迷你PC:专为Linux系统玩家打造
- 规格选择_止水螺杆规格及选择
- 软件测试中需求分析谁去做的,软件项目在进入需求分析阶段,测试人员应该开始介入其中。 - 问答库...
- [译]Go语言常用文件操作汇总
- 全局缓存管理工具-安装部署时提供小小的方便
- Linux编辑启动停止重启springboot jar包脚本
- HISI3536安装交叉编译工具链
- MySQL中的float和decimal类型有什么区别
- 常用的 Cron 时间表达式 定时器 正则表达式
- 同义词挖掘的一些常用方法 及同义词替换程序
- 自定义微信小程序TabBar
- 吴恩达采访人工智能大师实录
- Objective-C——initialize方法调用原理分析
- uos命令_目前UOS统一操作系统使用指南
- 杭电计算机专业期末考试助攻,杭电嘻哈:舶来文化亦可玩出小清新
热门文章
- linux缓冲设备,Linux设备驱动程序缓冲策略
- axure源文件_Axure函数应用:指示线跟随地图所选区域,并展示相应数据可视化...
- PHP 中 flush() 与 ob_flush() 的区别
- 使用VSCode玩转Java (二)
- 【对讲机的那点事】对讲机数字语音加密,保障通信安全
- 第151天:网页中插入百度地图方法(不需要密钥)
- spring boot 与配置
- 在昆山的日子终于要结束了
- IE浏览器,ajax提示错误“no transport”
- 创建文本节点createTextNode