青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Sheppard Y

keep thinking keep coding.

PHP/Java Bridge的使用

2016-07-06 日更新 
此篇博客已經(jīng)遷移到新博客,并做行文檢查和優(yōu)化排版:
http://blog.clawz.me/2013/01/18/13-php-java-bridge/

 


一、需求背景

    之前介紹過(guò)我們項(xiàng)目的架構(gòu),由于歷史原因,架構(gòu)演變成as<-->java<-->php這樣,java與as通過(guò)tcp長(zhǎng)連接通信,java與php通過(guò)兩條http通道來(lái)通信(java與php各自有個(gè)http server,并各自作為對(duì)方的http client,java轉(zhuǎn)發(fā)as以前的post給php;php需要跨session推送或者廣播時(shí)變?yōu)閔ttp client向java的http server做post)。

    這之前的架構(gòu)是as的功能邏輯大部分直接與php進(jìn)行http通信。

    項(xiàng)目的目標(biāo)是慢慢將php部分寫(xiě)的糟糕的已有邏輯(例如幫派這種交互和廣播同步比較多的)改到j(luò)ava服務(wù)器上。項(xiàng)目人員配備跟不上,所以不能一下子全轉(zhuǎn)了。

    如果用之前的兩條http通道來(lái)小步快跑式的移邏輯,就需要再封裝這兩個(gè)通道之間的通信,費(fèi)時(shí)間還不一定好使,所以我們需要一個(gè)java直接調(diào)用php的技術(shù)。

    goole了解后,最終決定使用PHP/Java Bridge。 

 

二、PHP/Java Bridge

(一)示例

CallPhp.java

 1 package me.sheppardy.study;
 2 
 3 import java.io.ByteArrayOutputStream;
 4 import java.io.FileReader;
 5 
 6 import javax.script.ScriptEngine;
 7 import javax.script.ScriptEngineManager;
 8 
 9 /**
10  * 
11  * PHP/Java Bridge, example
12  * @author sheppard(ysf1026@gmail.com) 2013-01-18
13  *
14  */
15 public class CallPhp
16 {
17         
18         public static void main(String[] args) throws Exception
19         {
20                 test(1104);
21                 test(531);
22                 test(1221);
23                 test(110);
24         }
25         
26         public static void test(int id) throws Exception
27         {
28                 Response rep = new Response();
29                 call(new Request(id), rep);
30                 System.out.println("CallPhp.test, id=" + id + " message=" + rep.message);
31         }
32         
33         public static void call(Request req, Response rep) throws Exception
34         {
35                 ScriptEngineManager engineManager = new ScriptEngineManager();
36                 ScriptEngine engine = engineManager.getEngineByName("php-invocable");
37 
38                 ByteArrayOutputStream log = new ByteArrayOutputStream();
39 
40                 try
41                 {
42                         engine.put("phpRootDir", "data/php");
43                         engine.put("log", log);
44                         engine.put("req", req);
45                         engine.put("rep", rep);
46                         FileReader reader = new FileReader("data/php/gate.php");
47                         engine.eval(reader);
48                         System.out.println("CallPhp.call phpLog=" + log.toString());
49                 }
50                 catch(Exception e)
51                 {
52                         System.out.println("CallPhp.call phpLog=" + log.toString());
53                         throw e;
54                 }
55         }
56 }
57 
58 class Request
59 {
60         public Request(int id)
61         {
62                 this.id = id;
63         }
64         public int id;
65 }
66 
67 class Response
68 {
69         public String message;
70 }

java-bin/data/php/gate.php

 1 <?php
 2 
 3 /**
 4  *
 5  * 腳本統(tǒng)一入口
 6  * @author sheppard(ysf1026@gmail.com) 2013-01-18
 7  *
 8  */
 9 
10 define('PHP_ROOT_DIR', java_context()->get('phpRootDir'));
11 $log = java_context()->get('log');
12 $log->write("\n\tjava give phpRootDir is " . PHP_ROOT_DIR);
13 
14 require_once(PHP_ROOT_DIR . '/function.php');
15 
16 $log->write(getDoomsday());
17 
18 $rep = java_context()->get('rep');
19 $rep->message = handle(java_context()->get('req'), $log);
20 
21 ?>

 

java-bin/data/php/function.php

 1 <?php
 2 
 3 /**
 4  *
 5  * 具體功能舉例
 6  * @author sheppard(ysf1026@gmail.com) 2013-01-18
 7  *
 8  */
 9 
10 function getDoomsday()
11 {
12         return "\n\tdoomsday is 20121221";      
13 }
14 
15 function handle($req$log)
16 {
17         $id = $req->id;
18         $log->write("\n\tfunction.php handle id=$id");
19         if('1104' == $id)
20                 return 'guess?';
21         else if('531' == $id)
22                 return 'score';
23         else if('1221' == $id)
24                 return 'maybe doomsday';
25         else
26                 return '404 not found';
27 }
28 
29 ?>

 

output

 1 CallPhp.call phpLog=
 2 java give phpRootDir is data/php
 3 doomsday is 20121221
 4 function.php handle id=1104
 5 CallPhp.test, id=1104 message=guess?
 6 CallPhp.call phpLog=
 7 java give phpRootDir is data/php
 8 doomsday is 20121221
 9 function.php handle id=531
10 CallPhp.test, id=531 message=score
11 CallPhp.call phpLog=
12 java give phpRootDir is data/php
13 doomsday is 20121221
14 function.php handle id=1221
15 CallPhp.test, id=1221 message=maybe doomsday
16 CallPhp.call phpLog=
17 java give phpRootDir is data/php
18 doomsday is 20121221
19 function.php handle id=110
20 CallPhp.test, id=110 message=404 not found

 

(二)注意事項(xiàng)

1. 由于是java調(diào)用的php,所以php里當(dāng)前工作路徑變成了java的。

2. FileReader加載*.php文件之后ScriptEngine.evel(FileReader)的耗時(shí)大概為230+ms,StringReader時(shí)為180+ms,速度都不咋滴,但是這不是我們項(xiàng)目急著考慮的問(wèn)題,之前的http方式也好不到哪去,優(yōu)化留到以后再說(shuō)。

3. php的解釋器運(yùn)行路徑配置:-Dphp.java.bridge.php_exec=。

 

三、相關(guān)資料

1. 官網(wǎng):http://php-java-bridge.sourceforge.net/pjb/

2. 符合java調(diào)腳本標(biāo)準(zhǔn)的調(diào)php示例:http://php-java-bridge.sourceforge.net/pjb/examples/source.php?source=PhpThreads.java


ps:2013年1月18日我在CU的博客

 

 

 

 

posted on 2013-04-08 18:20 Sheppard Y 閱讀(956) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 其他語(yǔ)言設(shè)計(jì)架構(gòu)

<2013年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

導(dǎo)航

統(tǒng)計(jì)

留言簿(1)

隨筆分類(lèi)(77)

隨筆檔案(58)

me

基友

同行

業(yè)界前輩

最新隨筆

搜索

積分與排名

最新評(píng)論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美一区二区三区久久精品| 欧美三日本三级三级在线播放| 免费看亚洲片| 欧美中文在线观看| 亚洲欧美日韩一区二区在线| 亚洲视频在线观看免费| 一区二区三区欧美激情| 亚洲午夜精品17c| 久久福利电影| 欧美激情1区| 99精品国产一区二区青青牛奶| 在线一区二区视频| 久久se精品一区二区| 美脚丝袜一区二区三区在线观看 | 亚洲一区二区黄| 国产午夜精品美女视频明星a级| 模特精品裸拍一区| 免费观看日韩| 欧美人与禽猛交乱配| 国产精品成人一区二区三区夜夜夜 | 久久久99久久精品女同性| 久久一区二区三区国产精品| 亚洲精品欧美激情| 欧美一区激情| 国产精品久久网站| 一本久道久久综合狠狠爱| 99精品国产99久久久久久福利| 亚洲四色影视在线观看| 欧美一区二粉嫩精品国产一线天| 亚洲天堂av电影| 黑人一区二区三区四区五区| 欧美国产精品v| 亚洲欧洲一区二区三区在线观看 | 国产原创一区二区| 欧美一级在线视频| 欧美一级二区| 一区免费视频| 欧美jizzhd精品欧美巨大免费| 久久另类ts人妖一区二区| 亚洲电影视频在线| 欧美视频国产精品| 亚洲欧美视频一区二区三区| 一本色道久久综合亚洲精品高清 | 欧美激情精品久久久久久久变态| 亚洲国产精品久久人人爱蜜臀| 欧美一区二区三区免费视频| 在线视频中文亚洲| 欧美国产国产综合| 免费成人高清| 亚洲国内高清视频| 欧美精品国产精品| av成人免费| 欧美在线免费观看| 在线免费观看日韩欧美| 久久久蜜臀国产一区二区| 久久一区二区三区四区五区| 狠色狠色综合久久| 欧美成年人视频| 99re66热这里只有精品4| 欧美亚洲免费在线| 亚洲综合首页| 亚洲无吗在线| 欧美日韩成人一区二区三区| 欧美xart系列高清| 国内精品久久久久久 | 欧美大秀在线观看| 久久天天综合| 红桃视频一区| 久热精品视频在线免费观看| 麻豆国产精品一区二区三区 | 亚洲视屏一区| 91久久嫩草影院一区二区| 久久国产精品久久国产精品| 欧美激情91| 久久精品免费电影| 久久本道综合色狠狠五月| 一区二区三区免费看| 亚洲人成人99网站| 欧美国产日韩精品免费观看| 亚洲欧美制服另类日韩| 国产免费观看久久黄| 欧美一级夜夜爽| 欧美成人午夜免费视在线看片| 国产欧美精品在线播放| 久久精品免费播放| 欧美韩国在线| 亚洲天堂av综合网| 伊人久久大香线蕉综合热线 | 欧美一区二区三区四区在线观看| 欧美日韩亚洲天堂| 欧美在线播放一区| 日韩亚洲欧美中文三级| 久久久综合免费视频| 亚洲第一区色| 国产精品一卡二| 欧美精品精品一区| 久久人人97超碰国产公开结果| 欧美激情第3页| 久久免费国产精品1| 亚洲午夜免费福利视频| 亚洲黄一区二区| 伊人久久亚洲热| 亚洲成人在线网站| 国产日韩欧美日韩大片| 欧美午夜精品理论片a级按摩 | 欧美精品在线播放| 亚洲伦理一区| 亚洲国产精品一区二区www| 国产精品一区二区你懂的| 欧美成人午夜| 欧美高清不卡| 免费欧美日韩国产三级电影| 久久免费国产| 欧美成人精品一区| 欧美黄色免费网站| 欧美激情一区二区三区四区| 久久久欧美精品sm网站| 久久午夜激情| 欧美日韩国产成人在线观看| 欧美人成在线视频| 国产乱码精品一区二区三| 国产精品影视天天线| 国产原创一区二区| 亚洲国产乱码最新视频| 亚洲人成在线观看一区二区| 一本一本久久a久久精品综合妖精| 亚洲日本中文字幕区 | 欧美国产视频一区二区| 欧美激情影院| 国产一区二区三区直播精品电影| 韩国亚洲精品| 亚洲综合久久久久| 久久精品人人爽| 在线视频欧美日韩精品| 美女尤物久久精品| 国产日韩欧美在线| 亚洲午夜一区| 亚洲美女在线看| 久久亚洲一区二区三区四区| 欧美搞黄网站| 亚洲欧洲在线播放| 欧美成人免费一级人片100| 亚洲综合日韩| 国产精品久久网| 亚洲免费人成在线视频观看| 欧美激情视频一区二区三区免费 | 亚洲国产精品久久久久秋霞影院| 亚洲精品国产拍免费91在线| 久久免费视频网站| 精品999久久久| 你懂的国产精品永久在线| 欧美在线视屏| 亚洲国产精品国自产拍av秋霞| 久久av资源网| 久久综合伊人77777麻豆| 国产精品美女久久久久久2018 | 亚洲午夜一区| 在线亚洲电影| 久久精品99国产精品| 亚洲视频网在线直播| 性欧美xxxx大乳国产app| 欧美一二三视频| 亚洲欧美日韩一区二区三区在线观看| 欧美在线播放高清精品| 亚洲一区观看| 欧美一区二区精美| 久久激情五月激情| 久久久久国产精品厨房| 亚洲欧美日韩第一区| 欧美主播一区二区三区| 日韩一级大片在线| 亚洲一区亚洲二区| 国产精品久久久久久久午夜| 亚洲一区二区三区在线看| 久久综合九色九九| 亚洲天堂av在线免费观看| 国产亚洲欧美一区二区三区| 欧美高清你懂得| 亚洲一本视频| 亚洲一区二区三区精品在线| 亚洲精品在线免费| 久久精品国产v日韩v亚洲| 卡一卡二国产精品| 欧美绝品在线观看成人午夜影视| 久久性天堂网| 亚洲一区在线免费| 欧美激情一区二区三区在线视频观看| 国产精品无码专区在线观看| 加勒比av一区二区| 亚洲专区在线视频| 一区二区三区 在线观看视频| 免费视频最近日韩| 在线观看欧美| 久久国产精品99精品国产| 欧美不卡一区| 一区二区免费在线视频| 夜夜夜久久久| 亚洲国产精品一区二区www在线| 亚洲国产精品成人精品| 午夜亚洲福利|