ice 服務java連接,“先進的互聯互通技術”–使用ice聯通php和java [part 1 server]

PHP沒有中間件,導致了對很多麻煩。比如,對數據庫的操作必須要鏈接數據庫,然后做SQL操作。WEB程序直接操作數據庫的方法,這樣會帶來很多人為因素的事故隱患,以及管理上的麻煩,尤其是對大型的網站應用來說。規范的模式應該是,WEB程序傳遞參數到一個服務程序上,由該服務程序進行判斷并最終操作數據庫或者其它數據文件,這樣做到了明確權限控制,和業務類型集中管理。去年伴隨著ICE的推出,PHP終于有了可以使用的中間件。在PHP的發展史上,應該是一個里程碑。

ICE入門

ICE(Internet Communications Engine 網絡通訊引擎),是由Corba原核心成員開發的一個開源中間件,據稱其各種性能完全優于Corba。除此之外,我們第一次見到了直接支持PHP的中間件。

ICE的安裝,去 下載一個Ice針對PHP的安裝包,按照說明安裝上。

ICE的使用:使用Slice(ICE的一種簡單語法腳本),編寫一個xx.ice文件。可以使用slice2cpp或slice2java等生成一個cpp或java的ICE框架程序,然后在這個框架程序中進行代碼編寫。ICE在PHP的應用繼承了PHP的一貫傳統——簡單,只需要在php.ini中加載該xx.ice,在PHP中就可以使用了。

ICE在PHP應用中的缺點,無法使用PHP編寫Server端,其實這也是PHP的一個缺陷——沒有完善的多進程和多線程管理機制。因此,Server端可以采用ICE所支持的其它語言進行編寫,比如JAVA/C++/VB/PYTHON等。

開始傳說中的“互聯互通”

本例以 Ice 3.2.1為例 下載的位置和參考的文檔都在下面

ICE其實是一個網絡框架,入門說明中說了,PHP不能用來做服務端,在這里我們使用java來做服務端,用php來連java,達到傳說中的“互聯互通”。

我們的服務端用Linux,客戶端也用Linux(純廢話)。JAVA環境的搭建不在表述了。

在下載可以看出來,服務器支持yum或者是rpm是多么幸福的一件事情,或者搞一份tar.gz的包下來configure make make install,大概也就是這樣。好了這樣子就表示安裝結束了。。。

安裝之后的Ice相關路徑:

slice2cpp,slice2java在/usr/bin/下

Ice.jar 存儲于 /usr/share/java/下

相關的Ice的庫存儲于/usr/lib下.

第1步,建立服務器端的demo.ice的文件(注意代碼里的半全角,如果是全角自行轉成半角):

module Demo{

interface test{

string ? execute(string mth,string cmd);

};

};

第2步,執行:?slice2java demo.ice 生成一堆文件。。。

第3步,動手干活

上一步執行完會在當前目錄產生一個Demo目錄,目錄下自動生成:

-rw-r–r–? 1 root root 2316? 4月 15 17:01 _testDelD.java

-rw-r–r–? 1 root root? 560? 4月 15 17:01 _testDel.java

-rw-r–r–? 1 root root 1929? 4月 15 17:01 _testDelM.java

-rw-r–r–? 1 root root 4177? 4月 15 17:01 _testDisp.java

-rw-r–r–? 1 root root 1070? 4月 15 17:01 testHolder.java

-rw-r–r–? 1 root root? 488? 4月 15 17:01 test.java

-rw-r–r–? 1 root root? 481? 4月 15 17:01 _testOperations.java

-rw-r–r–? 1 root root? 460? 4月 15 17:01 _testOperationsNC.java

-rw-r–r–? 1 root root 5418? 4月 15 17:01 testPrxHelper.java

-rw-r–r–? 1 root root? 569? 4月 15 17:01 testPrxHolder.java

-rw-r–r–? 1 root root? 567? 4月 15 17:01 testPrx.java

到目前為止,demo.ice所以Ice接口部分的定義以及相關依賴都已經自動生成.

我們要實現自己的execute方法,覆蓋testPrx.java的同名:

//TestImp.java

package Demo;

import Ice.Current;

public class TestImp extends _testDisp{

public String execute(String mth, String cmd, Current __current) {

// TODO Auto-generated method stub

return mth+cmd;

}

}

第4步,建立一個Server服務在10000進行偵聽

//Server.java

package Demo;

public class Server {

public static void main(String[] args) {

int status = 0;

Ice.Communicator ic = null;

try {

ic = Ice.Util.initialize(args);

Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints(

“TestAdapter”, “default -p 10000″);

Ice.Object object = new TestImp();

adapter.add(object, ic.stringToIdentity(”TestAdapter”));

adapter.activate();

ic.waitForShutdown();

} catch (Ice.LocalException e) {

e.printStackTrace();

status = 1;

} catch (Exception e) {

System.err.println(e.getMessage());

status = 1;

}

if (ic != null) {

// Clean up

//

try {

ic.destroy();

} catch (Exception e) {

System.err.println(e.getMessage());

status = 1;

}

}

System.exit(status);

}

}

以上大部分代碼都是框架生成,你只需要在里面填寫TODO。把這個代碼拖回來用eclipse打成jar包,注意,需要依賴ice.jar這個包,這個包可以在網站下載到。

生成DemoServer.ajr后傳到服務器,運行java -cp ./:Ice.jar:DemoServer.jar Demo.Server

運行成功的條件是Ice.jar和DemoServer.jar都在一個目錄里。(Ice.jar從下載地址下載)

Server運行之后監聽于10000端口,需要修改iptables,允許其他機器可以連接。

編輯 iptables

vi /etc/sysconfig/iptables

-A?RH-Firewall-1-INPUT?-m?state?–state?NEW?-m?tcp?-p?tcp?–dport10000-j?ACCEPT

繼續深入互聯互通

這一節完成了Server,一個10000端口的Server在等待著我們用PHP來聯通中。下一節,我們將講述:IcePHP環境的搭建,PHP調用Ice如何與JAVA互聯互通,以及一個完整的Demo,保存好本節的代碼,后面還有用處。[未完待續]

轉載自[]

本文鏈接:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/287298.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/287298.shtml
英文地址,請注明出處:http://en.pswp.cn/news/287298.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HttpCookie

參考 : http://www.cnblogs.com/fish-li/archive/2011/07/03/2096903.html 上文結尾有提到一個說法 4. HttpRequest.Cookies 與 HttpResponse.Cookies 會有關系(很奇怪吧)。 微軟官網也是這么說的 : https://msdn.microsoft.com/en-us/library/system.we…

Android之BaseQuickAdapter.setOnItemChildClickListener點擊死人也沒反應的原因

1 問題 用BaseQuickAdapter設置子view點擊事件 unInstalledAdapter!!.setOnItemChildClickListener(object: BaseQuickAdapter.OnItemChildClickListener {override fun onItemChildClick(adapter: BaseQuickAdapter<*, *>?, view: View?, position: Int) {var info =…

【經典回放】多種語言系列數據結構算法:棧(C#版)

本文采用C#語言實現棧結構算法并舉例應用。 一、C#的棧對象使用 對C#而言,要使用棧是極其簡單的事情,因為C#已經有棧對象,所以根本不需要自用再用順序表構造棧,只需要你會說明、會應用即可。 在C#中棧對象的類型名稱是Stack,這是個泛型的對象,所以,你在使用這個對象的時…

美國銀行將AI應用于企業應收賬款處理

據外媒消息&#xff0c;美國銀行&#xff08;Bank of America&#xff09;與Fintech創業公司High Radius達成合作&#xff0c;將人工智能應用于企業應收賬款處理。該應用程序專為大型、復雜的公司管理大筆支付業務&#xff0c;因這些公司常常發生回款信息丟失或一方單獨收到付款…

在 Kubernetes 上部署 Secret 加密系統 Vault

HashiCorp Vault 是一個基于身份的 Secret 和加密管理系統。Secret 是您想要嚴格控制訪問的內容&#xff0c;例如 API 加密密鑰、密碼或證書。Vault 提供由身份驗證和授權方法控制的加密服務。使用 Vault 的 UI、CLI 或 HTTP API&#xff0c;可以安全地存儲和管理對機密和其他敏…

《看聊天記錄都學不會C語言?太菜了吧》(15)你學了一節課的函數我5分鐘搞定了,還很熟

若是大一學子或者是真心想學習剛入門的小伙伴可以私聊我&#xff0c;若你是真心學習可以送你書籍&#xff0c;指導你學習&#xff0c;給予你目標方向的學習路線&#xff0c;無套路&#xff0c;博客為證。 本系列文章將會以通俗易懂的對話方式進行教學&#xff0c;對話中將涵蓋…

【經典回放】多種語言系列數據結構算法:棧(JavaScript版)

本文采用JavaScript語言實現棧結構算法并舉例應用。 JavaScript的棧是數組對象中自動提供的,這點如同C#,實際也不需要自己編寫什么棧的程序,如果你用: var s=new Array(); 定義一個s的數組,則這個s上將有以下的方法可供使用: 其中:FF: Firefox, IE: Internet Explore…

設計模式(10)-----模板方法模式

模板方法模式(Template Method) 定義 定義了一個操作中的算法的骨架&#xff0c;而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。 UML類圖 例子 AbstractClass package com.csdhsm.pattemdesign.template;/** * Title: …

Android之提示Caused by: java.lang.UnsupportedOperationException: Binary XML file line #67: You must sup

1 問題 : Caused by: java.lang.UnsupportedOperationException: Binary XML file line #67: You must supply a layout_width attribute. 05-08 16:42:59.322 23038 23038 E AndroidRuntime: at android.content.res.TypedArray.getLayoutDimension(TypedArray.java:7…

SLES修改本地FTP安裝源

2019獨角獸企業重金招聘Python工程師標準>>> SLES修改本地FTP安裝源 一、配置本機FTP............................................................................................................. 1 1.1、安裝.............................................…

.NET7 Preview4:重構的返回值TypedResults

為了更好的測試&#xff0c;更好的性能&#xff0c;Preview4帶了一個新的請求返回值類型&#xff0c;這個新的類型中封裝了所有的Http請求返回狀態函數&#xff0c;還包括了返回成功后的幾種數據類型&#xff0c;下面列舉了幾個常用的類型&#xff1a;app.MapGet("/test_o…

MATLAB軟件禁用利好,Matlab被禁用?一款國產軟件站了出來說:我就是中國的Matlab...

眾所周知&#xff0c;前段時間Matlab被禁用&#xff0c;引發了網友們對于國產工業軟件落后的諸多思考&#xff0c;比如為什么落后&#xff0c;落后到什么程度&#xff0c;有沒有替代品等等。并且從Matlab到EDA&#xff0c;再到CAD等等&#xff0c;甚至工業操作系統等等&#xf…

CMDB資產采集

Paramikoimport paramiko private_key paramiko.RSAKey.from_private_key_file(/home/auto/.ssh/id_rsa) # 創建SSH對象ssh paramiko.SSHClient()# 允許連接不在know_hosts文件中的主機ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 連接服務器ssh.connect(ho…

《看聊天記錄都學不會Python到游戲實戰?太菜了吧》(3)都說123是字符不是數字

本系列文章將會以通俗易懂的對話方式進行教學&#xff0c;對話中將涵蓋了新手在學習中的一般問題。此系列將會持續更新&#xff0c;包括別的語言以及實戰都將使用對話的方式進行教學&#xff0c;基礎編程語言教學適用于零基礎小白&#xff0c;之后實戰課程也將會逐步更新。 若…

ArcGIS實驗教程:ArcGIS 10.2手把手圖文安裝教程(經典版)

ArcGIS實驗視頻教程合集&#xff1a;《ArcGIS實驗教程從入門到精通》&#xff08;附配套實驗數據&#xff09; ArcGIS許可服務無法啟動解決辦法&#xff1a;Win10操作系統ArcGIS許可License無法啟動的解決方法匯總&#xff08;絕對成功&#xff01;&#xff09; 目錄 一、系統…

html中radio,checkbox值的獲取、賦值、注冊事件

1&#xff0c;radio分組 只要name一樣&#xff0c;就是一組的&#xff0c;即一組中只能選擇一個&#xff0c;如下&#xff1a; 代碼如下:<span>group1:</span> <input type"radio" id"radio1" checked"checked" name"grou…

ObjectAnimator屬性動畫應用demo

感謝慕課網--eclipse_xu 布局文件&#xff1a;activity_main.xml 1 <FrameLayout xmlns:android"http://schemas.android.com/apk/res/android"2 xmlns:tools"http://schemas.android.com/tools"3 android:layout_width"match_parent"…

java數據庫防火墻,數據庫centos7防火墻導致java程序訪問mongodb3.0.1時報錯的問題分析...

環境描述&#xff1a;數據庫&#xff1a;mongodb3.0.1數據庫系統&#xff1a;centos7,(虛擬機&#xff0c;最小安裝)數據庫驅動&#xff1a;mongo-Java-driver-3.0.0.jar問題描述&#xff1a;shell環境下用mongo客戶端程序能正常連接mongod&#xff0c;但java程序始終報錯。查看…

Android之提示androidx.recyclerview.widget.LinearLayoutManager@51ddcd is already attached to a RecyclerV

1 問題 我有2個recycleView,但是用的同一個線性布局導致錯誤如下 LayoutManager androidx.recyclerview.widget.LinearLayoutManager@51ddcd is already attached to a RecyclerView: androidx.recyclerview.widget.RecyclerView{dfe1682 VFED..... ......I. 0,0-0,0 #7f090…

今晚在線解讀|2021-2022 .NET 中國開發者生態調查報告

點擊藍字關注我們作為一名 .NETer&#xff0c;你就職于怎樣規模的公司&#xff1f;所屬什么行業領域&#xff1f;平時使用哪些快速開發框架&#xff1f;產品方向及收費模式又是怎樣的&#xff1f; 作為一名開發者&#xff0c;你從業已有幾年&#xff1f;平時加班多嗎&#xff1…