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

Sheppard Y

keep thinking keep coding.

PHP/Java Bridge的使用

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

 


一、需求背景

    之前介紹過我們項目的架構,由于歷史原因,架構演變成as<-->java<-->php這樣,java與as通過tcp長連接通信,java與php通過兩條http通道來通信(java與php各自有個http server,并各自作為對方的http client,java轉發as以前的post給php;php需要跨session推送或者廣播時變為http client向java的http server做post)。

    這之前的架構是as的功能邏輯大部分直接與php進行http通信。

    項目的目標是慢慢將php部分寫的糟糕的已有邏輯(例如幫派這種交互和廣播同步比較多的)改到java服務器上。項目人員配備跟不上,所以不能一下子全轉了。

    如果用之前的兩條http通道來小步快跑式的移邏輯,就需要再封裝這兩個通道之間的通信,費時間還不一定好使,所以我們需要一個java直接調用php的技術。

    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  * 腳本統一入口
 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

 

(二)注意事項

1. 由于是java調用的php,所以php里當前工作路徑變成了java的。

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

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

 

三、相關資料

1. 官網:http://php-java-bridge.sourceforge.net/pjb/

2. 符合java調腳本標準的調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) 評論(0)  編輯 收藏 引用 所屬分類: 其他語言設計架構

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

導航

統計

留言簿(1)

隨筆分類(77)

隨筆檔案(58)

me

基友

同行

業界前輩

最新隨筆

搜索

積分與排名

最新評論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲与欧洲av电影| 羞羞漫画18久久大片| 亚洲一区不卡| 免费成人网www| 国产一区欧美| 一本色道久久综合亚洲91| 欧美在线播放高清精品| 中文国产成人精品久久一| 国产精品久久久久高潮| 欧美a级一区| 欧美日韩高清免费| 欧美成人影音| 亚洲一区二区三区高清| 免费的成人av| 老司机精品导航| 国产精品嫩草99av在线| 亚洲国产精品va在线看黑人| 欧美在线观看天堂一区二区三区| 国产欧美在线播放| 一区二区三区高清| 亚洲午夜女主播在线直播| avtt综合网| 久久人91精品久久久久久不卡| 久久亚洲精品视频| 欧美国产日韩二区| 国产精品v欧美精品v日韩| 国语自产精品视频在线看| 亚洲日本电影在线| 噜噜爱69成人精品| 激情五月综合色婷婷一区二区| 亚洲天堂第二页| 亚洲精品国偷自产在线99热| 国产免费亚洲高清| 狠狠色综合网站久久久久久久| 欧美亚洲成人免费| 亚洲精品视频啊美女在线直播| 亚洲深夜福利视频| 亚洲福利精品| 欧美制服第一页| 国产日韩欧美在线一区| 国产精品s色| 欧美二区在线观看| 六月婷婷久久| 欧美精品在线观看| 老色鬼精品视频在线观看播放| 国产精品视频网| 在线不卡a资源高清| 国产精品狠色婷| 牛牛精品成人免费视频| 性欧美video另类hd性玩具| 亚洲国产午夜| 西瓜成人精品人成网站| aa亚洲婷婷| 亚洲一区二区三区午夜| 99国产精品久久| 欧美一区二区视频在线观看2020| 欧美在线视频二区| 亚洲精品自在久久| 一本色道久久综合狠狠躁篇的优点 | 黄色精品一二区| 亚洲高清电影| 国产精品成人av性教育| 久久久亚洲精品一区二区三区| 久久综合色综合88| 欧美亚洲色图校园春色| 欧美成人一区二区三区在线观看| 亚洲深夜福利在线| 欧美一区二区三区免费看| 久久综合久久综合久久| 亚洲天堂成人在线观看| 久久久久久久久蜜桃| 亚久久调教视频| 欧美午夜欧美| 日韩午夜激情av| 亚洲精品免费在线观看| 久久夜色精品亚洲噜噜国产mv| 久久成人国产精品| 国产色综合久久| 欧美中文字幕在线观看| 午夜国产精品影院在线观看 | 快she精品国产999| 国产精品毛片a∨一区二区三区| 欧美黄色免费网站| 亚洲国产小视频在线观看| 久久久久国产一区二区| 欧美成人精品不卡视频在线观看 | 亚洲精品在线观看免费| 久久精品一区二区| 免费日韩精品中文字幕视频在线| 狠狠网亚洲精品| 欧美福利视频| 新片速递亚洲合集欧美合集 | 欧美日韩情趣电影| 亚洲永久免费av| 老司机一区二区三区| 亚洲日本中文字幕| 国产精品亚洲一区二区三区在线| 性欧美video另类hd性玩具| 久久综合久久久久88| 久久久人成影片一区二区三区| 久久香蕉国产线看观看av| 亚洲国产精品一区二区www在线 | 亚洲乱码日产精品bd| 欧美一二区视频| 亚洲美女在线国产| 国产视频亚洲精品| 欧美日韩成人在线视频| 久久蜜桃精品| 久久精品国产免费观看| 久久精品夜色噜噜亚洲a∨| 欧美中文在线免费| 欧美资源在线观看| 免费观看成人| 久久久伊人欧美| 午夜在线视频观看日韩17c| 99re6这里只有精品| 在线精品一区| 伊人久久大香线蕉av超碰演员| 国产精品老女人精品视频| 欧美极品一区二区三区| 欧美人与性动交a欧美精品| 欧美激情成人在线| 欧美猛交免费看| 国产精品免费久久久久久| 国产精品视频你懂的| 国产免费观看久久黄| 国产综合自拍| 亚洲国产精品成人综合| 亚洲毛片一区| 在线视频一区二区| 欧美亚洲日本国产| 狂野欧美一区| 日韩一级视频免费观看在线| 亚洲欧美视频一区二区三区| 久久午夜精品一区二区| 欧美午夜美女看片| 国模大胆一区二区三区| 午夜精品久久久久99热蜜桃导演| 亚洲日本免费| 久久免费国产精品1| 欧美中文字幕视频| 亚洲一区二区不卡免费| 亚洲精品孕妇| 亚洲校园激情| 久久国产精品黑丝| 午夜欧美电影在线观看| 性欧美1819sex性高清| 亚洲看片一区| 免费日韩视频| 影音先锋久久久| 久久精品国产欧美激情| 久久色中文字幕| 国内精品视频一区| 久久嫩草精品久久久久| 欧美福利小视频| 一本色道久久| 国产欧美精品日韩区二区麻豆天美| 午夜欧美电影在线观看| 久久综合久久综合久久| 亚洲激情图片小说视频| 欧美日韩综合精品| 亚洲一区二区三区免费观看| 久久人人爽人人爽爽久久| 亚洲电影视频在线| 欧美三级在线视频| 欧美在线观看视频| 亚洲欧洲在线一区| 午夜精品视频在线观看一区二区| 国产日韩欧美一区二区| 免费在线观看成人av| 亚洲香蕉在线观看| 欧美高清视频在线观看| 亚洲欧美清纯在线制服| 亚洲黄色成人久久久| 国产精品中文字幕在线观看| 欧美jizzhd精品欧美喷水| 一区二区三区四区五区精品视频| 久久激情视频免费观看| aⅴ色国产欧美| 精品96久久久久久中文字幕无| 欧美日韩国产二区| 久久在线免费观看| 亚洲欧美国产77777| 欧美激情一区二区三区在线视频| 亚洲摸下面视频| 亚洲乱码视频| 在线免费日韩片| 国产精品一二三视频| 欧美国产精品va在线观看| 新狼窝色av性久久久久久| 99在线精品观看| 亚洲福利在线视频| 久久久噜噜噜久久久| 午夜精品福利视频| 一本一本久久a久久精品综合妖精| 国产一区二区三区在线观看免费 | 99国产精品自拍| 久久久久.com| 国内成人精品视频| 久久国产精品99国产|