aardio 文档
aardio 范例: RPC 服务端 - 支持任意本地网页调用 aardio 函数
//external 服务器
import win.ui;
/*DSG{{*/
var winform = win.form(text="RPC 服务端 - 支持任意本地网页调用 aardio 函数";right=759;bottom=469)
winform.add(
edit={cls="richedit";left=23;top=24;right=730;bottom=446;edge=1;hscroll=1;multiline=1;vscroll=1;z=1}
)
/*}}*/
import web.rpc.externalServer;
var externalServer = web.rpc.externalServer();
//只有下面指定的函数网页才能调用
externalServer.external = {
test = function(...){
winform.edit.print("external.test 被调用",...)
}
tag = function(strs,...){
var args = {...}
for(i=#args;1;-1){
table.insert(strs,args[i],i+1);
}
strs = string.join(strs);
return strs;
}
}
//可选用下面的方法限定只有下面允许的外部域名才能访问 aardio 函数
externalServer.accessControlAllowOrigin = {
["https://d.aardio.com"] = true //指定准确前缀,域名后不要加斜杆
}
//如果不指定端口号,则默认动态分配空闲的端口号
//如果不指定具体的端口号,则只有 externalServer 提供的网页才能自 aardio.js 自动获取到端口号
winform.edit.print( "启动服务器:",externalServer.start())
winform.edit.print( "请在网页中引入:",externalServer.getUrl("aardio.js"))
externalServer.httpHandler["/test.html"] = function(response,request){
var html = /**
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<script src="<?=owner.rpcUrl?>"></script>
<script>
/*
也可以在前端源码中用 npm i aardio 安装 aardio.js 。
externalServer 提供的 aardio.js 自动获取 RPC 端口并初始化 RPC 方法。
如果在创建 web.rpc.externalServer 以后调用标准库中的 nodeJs 创建 Node.js 进程,
也可以自动获取端口号并在连接成功前创建远程函数。
远程服务器上的网页可通过 URL 参数获取 RPC 端口并初始化 RPC 方法。
也可以调用 aardio.open( 端口号 ) 连接指定的端口。
可参考:https://d.aardio.com/ajs/demo.html
*/
//调用 aardio 函数。
aardio.test("这是网页调用 aardio 的参数",1122);
//用 aardio 解析模板字符串
let $ = aardio.tag;
$`abc${123}ddd${456}`.then( v=> alert("模板字符串:"+v) )
</script>
</head>
<body><?=owner.rpcUrl?></body></html>
**/
response.write( string.loadcode(html,{rpcUrl=externalServer.getUrl("aardio.js")}) );
}
import process;
process.openUrl(externalServer.getUrl("/test.html"))
/*
如果传入小写 http: 或 https: 开头的网址,
则返回了附加 rpcServerPort 与 rpcAasdl 参数的网址,
aardio.js 识别这些参数后自动获取 RPC 端口并初始化 RPC 方法。
未传以上参数则网页中必须调用 aardio.open 连接指定的端口。
*/
var rpcUrl = externalServer.getUrl("https://d.aardio.com/ajs/demo.html");
process.openUrl( rpcUrl );
//上面 demo.html 的源码如下:
/**
<!doctype html>
<html><head>
<meta charset="utf-8">
<script src="https://d.aardio.com/ajs/aardio.js"></script>
<script type="text/javascript">
(async () => {
/*
aardio.js 可自动从网址参数 rpcServerPort,rpcAasdl 获取并连接端口与所有远程函数。
如果未指定参数,则应调用 aardio.open( RPC端口号 ) 打开 RPC 服务器。
aardio.open 返回 Promise 对象。
连接成功前只能使用 aardio.xcall 调用本地函数。
*/
//await aardio.open(8082);
await aardio.test("这是网页调用 aardio 的参数", 1122);
let $ = aardio.tag;
$`abc${123}ddd${456}`.then(v => alert("模板字符串:" + v));
})()
</script>
</head><body></body></html>
**/
winform.show();
win.loopMessage();
Markdown 格式