Atitit.使用引擎加脚本架构的设计 使用php,js来开发桌面程序。。
Atitit.使用引擎加脚本架构的设计 使用php,js来开发桌面程序。。
3.4.1. Html5界面确定要是有的后台引擎$parser=php c# java js2
3.4.6. 桌面程序$_GET参数的解析,自定义req引擎4
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来开发桌面程序。。的更多相关文章
- U3D 游戏引擎之游戏架构脚本该如何来写
		这篇文章MOMO主要想大家说明一下我在Unity3D游戏开发中是如何写游戏脚本的,对于Unity3D这套游戏引擎来说入门极快,可是要想做好却非常的难.这篇文章的目的是让哪些已经上手Unity3D游戏引 ... 
- 【转载】U3D 游戏引擎之游戏架构脚本该如何来写
		原文:http://tech.ddvip.com/2013-02/1359996528190113.html Unity3D 游戏引擎之游戏架构脚本该如何来写 2013-02-05 00:48:4 ... 
- atitit 研发管理 要不要自己做引擎自己实现架构?.docx
		atitit 研发管理 要不要自己做引擎自己实现架构?.docx 1.1. 目前已经有很多引擎了,还要自己做吗??1 1.2. 答案是自己做更好,利大于弊1 2. 为什么要自己做??1 2.1. 从历 ... 
- Atitit. camel分词器 分词引擎 camel拆分 的实现设计
		Atitit. camel分词器 分词引擎 camel拆分 的实现设计 1. camel分词器1 1.1. 实现的界定符号大写字母小写字母数字1 1.2. 特殊处理 对于JSONObject 多个大写 ... 
- .NET应用架构设计—重新认识分层架构(现代企业级应用分层架构核心设计要素)
		阅读目录: 1.背景介绍 2.简要回顾下传统三层架构 3.企业级应用分层架构(现代分层架构的基本演变过程) 3.1.服务层中应用契约式设计来解决动态条件不匹配错误(通过契约式设计模式来将问题在线下暴露 ... 
- .NET应用架构设计—再次了解分层架构(现代企业应用分层架构核心设计元素)
		阅读文件夹: 1.背景介绍 2.简要回想下传统三层架构 3.企业级应用分层架构(现代分层架构的基本演变过程) 3.1.服务层中应用契约式设计来解决动态条件不匹配错误(通过契约式设计模式来将问题在线下暴 ... 
- atitit.木马病毒webshell的原理and设计 java c# .net php.
		atitit.木马病毒webshell的原理and设计 java c# .net php. 1. 隐蔽性 编辑 WebShell后门具有隐蔽性,一般有隐藏在正常文件中并修改文件时间达到隐蔽的,还有利用 ... 
- 《程序猿闭门造车》之NBPM工作流引擎 - 项目整体架构
		前言: 又是一年一度的圣诞节,可这关我什么事呢 :( ,好不容易周末了,还是说说NBPM吧,前不久我发布了一篇关于工作流的文章:<程序猿闭门造车>之NBPM工作流引擎 - 开篇,很多爱好工 ... 
- 高性能页面加载技术--BigPipe设计原理及Java简单实现
		1.技术背景 动态web网站的历史可以追溯到万维网初期,相比于静态网站,动态网站提供了强大的可交互功能.经过几十年的发展,动态网站在互动性和页面显示效果上有了很大的提升,但是对于网站动态网站的整体页面 ... 
随机推荐
- django --01  helloworld样例入门
			很好的一个django教程:https://www.w3cschool.cn/django/django-first-app.html django版本:1.8 1.创建django工程 django ... 
- PASCAL 的开源工具
			PASCAL 的开源工具: 1)free pascal 代码编译器 http://www.freepascal.org/ 2)lazarus 图形界面开发工具 http://www.la ... 
- error: commit is a merge but no -m
			https://segmentfault.com/q/1010000010185984 执行git cherry-pick commitID操作时报错,如题 原因是合并的commitID做过merge ... 
- 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" ... 
- kafka 学习之初体验
			学习问题: 1.kafka是否需要zookeeper?2.kafka是什么?3.kafka包含哪些概念?4.如何模拟客户端发送.接受消息初步测试?(kafka安装步骤)5.kafka cluster怎 ... 
- iOS:分页控件UIPageControl的使用
			分页控件:UIPageControl 功能:通常搭配滚动视图一起使用,设置pagingEnabled=YES即可,UIScrollView会被分割成多个独立页面,用户的滚动体验则变成了页面翻转,一 ... 
- 兄弟连新版Linux视频教程
			兄弟连新版Linux视频教程目录:F:\linux\兄弟连新版Linux视频教程├(1)云计算是什么东西集群又是嘛玩意?.mp4├(2)兄弟连新版Linux教程 1.1.1 Linux系统简介-UNI ... 
- Maven nexus 安装nexus私服出现的两个问题
			1. 在win10中安装nexus时提示:wrapper | OpenSCManager failed - 拒绝访问. (0x5) 主要是没有权限.需要以管理员的身份运行 如果你是直接点击 start ... 
- [AngularJS] $interval
			$interval provides an excellent service for timed operations in your AngularJS apps. It has the adva ... 
- Python函数:使用谷歌翻译翻译英语字符串
			代码是同事写的,我把它单独抠出来,可以作为工具函数使用.当然,性能还是个问题,有待解决. import random import cookielib import urllib import url ... 
