HIJK自動(dòng)化JavaScript WebAPI開發(fā)包
HIJK是一個(gè)自動(dòng)化的WebAPI ALL-in-ONE開發(fā)工具包,使用了JDK8中新加入的執(zhí)行命令Nashorn jjs 啟動(dòng), 從服務(wù)器端到客戶端都使用統(tǒng)一的JavaScript語言, 所有修改都會(huì)在訪問時(shí)自動(dòng)加載,不需要再編譯.
HIJK包括了完整的Web服務(wù)器,能直接存取非結(jié)構(gòu)JSON數(shù)據(jù)的數(shù)據(jù)庫(kù)引擎,多個(gè)常用Web功能的JavaScript封裝。開發(fā)效率高, 無配置,開發(fā)完的系統(tǒng)直接復(fù)制到另一臺(tái)機(jī)器就能以一致的方式運(yùn)行。所有代碼都是標(biāo)準(zhǔn)JavaScript,兼容全部JavaScript開發(fā)工具,使用簡(jiǎn)單的幾行代碼就能完成復(fù)雜的功能。運(yùn)行效率高,單機(jī)處理每秒幾千次的HTTP數(shù)據(jù)查詢請(qǐng)求無壓力。
基本用法:
新建一個(gè)javascript文件,寫入兩個(gè)HelloWorld
hijk.api.helloworld = function() {
return "Hello World!";
};
hijk.api.helloworld2 = function() {
return {MSG: 'Hello World!'};
};
然后把文件復(fù)制到 js 目錄下,這兩個(gè)函數(shù)就會(huì)自動(dòng)作為WebAPI執(zhí)行,支持文本及JSON數(shù)據(jù),也可以使用 http://localhost:8080/edit/js/demo.js 直接在線開發(fā) WebAPI 或者在線編寫html頁面.
支持最新WebSocket WebAPI,可以通過 send(), onmessage() 與客戶端進(jìn)行雙向的數(shù)據(jù)通訊,使用這個(gè)功能只需要30行JavaScript代碼就能完成一個(gè)聊天室的服務(wù)器端開發(fā)。
hijk.api.ws_helloname = function(socket, request, response) {
socket.send("Name: ")
.onmessage(function(name) {
send_all("Welcome " + name);
});
};
通過標(biāo)準(zhǔn)HTTP及WebSocket協(xié)議提供的API能非常方便被Windows, Linux, Android, iOS, Windows Phone等各類終端機(jī)的應(yīng)用程序調(diào)用。同時(shí)HIJK開發(fā)包內(nèi)置了Web服務(wù)器,同時(shí)支持HTTP及HTTPS,只需要把 *.html 復(fù)制到 html 目錄就可以使用http(s)訪問了。
支持動(dòng)態(tài)HTML函數(shù),可以在HTML頁面返回客戶端前進(jìn)行附加處理,例如替換自定義標(biāo)簽,擴(kuò)展標(biāo)準(zhǔn)標(biāo)簽,也可以在頁面中插入JSON數(shù)據(jù),再調(diào)用JSON-HTML模板引擎,這個(gè)函數(shù)可以跟各種HTML擴(kuò)展引擎結(jié)合。下面是一個(gè)簡(jiǎn)單的例子,在<head>中動(dòng)態(tài)插入搜索引擎會(huì)讀取的關(guān)鍵字部分
hijk.api["/table1_template.html"] = function(file, map, request) {
function demo_server_template_processor(html, json) {
html = html.replaceFirst("<head>",
"<head><title>Server Process -" + json.record.name + "</title>" +
"<meta name='keywords' content='HIJK JavaScript WebAPI " + json.record.id + "' />" +
"<meta name='Description' content='HIJK HTML WebAPI Demo for template' />");
return html;
}
var html = file.html;
var json = hijk.api.table1_template_json(map, request);
html = demo_server_template_processor(html, json);
return html;
} 帶有JSON HTML 模板引擎庫(kù),使用標(biāo)準(zhǔn)HTML創(chuàng)建模板,可以綁定JSON數(shù)據(jù),非常方便直接地使用從WebAPI中返回的數(shù)據(jù)。綁定語法簡(jiǎn)單 "{{name}}" 綁定JSON的一個(gè)屬性, "{{#names}}內(nèi)容{{/names}} " 綁定一個(gè)數(shù)組,并且foreach生成內(nèi)容。引入的是JavaScript引擎庫(kù),可以放到客戶端中進(jìn)行模板處理,不費(fèi)服務(wù)器的CPU,放心加載50000條數(shù)據(jù),不影響服務(wù)器。
支持多線程。把一個(gè)普通function作為參數(shù)傳入sys.thread()就會(huì)轉(zhuǎn)到后臺(tái)線程中運(yùn)行, 通過 sys.threadreturn 返回運(yùn)算結(jié)果給主線程, 主線程中使用 take() 就能取得后臺(tái)線程運(yùn)行結(jié)果同時(shí)自動(dòng)完成線程同步。支持使用 sys.threadvar() 創(chuàng)建線程本地變量。
hijk.api.multi_thread = function() {
var results = sys.threadreturn(2);
//Thread 1
sys.thread(function() {
for (var i = 1; i <= 10000; i++) {}
results.put("T01-" + c);
});
//Thread 2
sys.thread(function() {
for (var i = 10001; i <= 20000; i++) {}
results.put("T02-" + c);
});
var rs = [];
rs.push(results.take());
rs.push(results.take());
return rs;
};
支持分布式編程,直接使用JavaScript就能進(jìn)行可讀性高的分布式開發(fā),同時(shí)控制多臺(tái)Web服務(wù)器,只需要把遠(yuǎn)程機(jī)器地址及需要在遠(yuǎn)程執(zhí)行的function傳入 start_remote_process 就可以了.
start_remote_process("ws://remotehost:9090/api/ws_eval",
function() {
print("Hello World");
})
支持?jǐn)?shù)據(jù)庫(kù)操作,在/js/目錄下的任何.js文件的任何位置寫入如下腳本指定主鍵及索引,自動(dòng)加載時(shí)就會(huì)自動(dòng)創(chuàng)建表table1, 智能化編程。
hijk.table.table1 = {
data: {"id": 0, "name": ""},
key: ["id"],
index: [["name"]]
};
數(shù)據(jù)庫(kù)可以直接存取非結(jié)構(gòu)化的JSON數(shù)據(jù)
hijk.api.table1_insert = function() {
var tid = hijk.db.id();
var v = {
id: tid,
name: "name" + tid,
fieldA: "fieldA" + tid,
fieldB: "fieldB" + tid
};
if (hijk.db.insert("table1", v)) {
return tid;
} else {
return -1;
}
};
hijk.api.table1_select_sum = function() {
var r = 0;
hijk.db.select("from table1", [],
function(v) {
r += v.id;
return true;
});
return r;
};
快捷系統(tǒng)備份,HIJK基于文件夾目錄設(shè)計(jì),包括數(shù)據(jù)庫(kù)文件都位于同一個(gè)目錄內(nèi),備份只需要復(fù)制整個(gè)文件夾,可以使用操作系統(tǒng)自帶的zip工具,一條命令完成壓縮加備份,系統(tǒng)還原只需要解壓縮文件夾。
HIJK的代碼全部是JavaScript,并對(duì)Java調(diào)試器有很好的兼容性,代碼能快速閱讀,自由修改及測(cè)試。
