作者:samisa
以下文中的翻譯名稱對照表 :
payload: 交談內容
object: 例項
function: 函式
使用 php來實現網路服務
使用框架: wso2 wsf/php
安裝環境: windows 或者 linux
(厭惡於眼下計算機文章夾雜無數難懂的翻譯以及術語,此處盡量使用口語以及漢語。)
wsmessages 類:
在呼叫網路服務的過程中,需要兩個訊息,傳送的訊息和接受的訊息,又來有往方能來往不是。 wsmessages 這個類就是在 web services framework for php (簡稱 wsf)這個開源框架中,用來封裝這兩個訊息的類。
wsmessages 有乙個很重要的變數 str來儲存訊息內容,以 xml格式來儲存「有效的載荷」 (他們把這個叫做 payload,我查英文本典,就是這個意思,但是它來回的出現,反覆的出現,今觀之,也就是交談內容,實際上就是除去那些 xml的定義,以及一些其他的所謂『命名空間' ->namespace的定義而已。要搞清楚什麼是命名空間,請檢視 xml的 w3c定義 )。有效載荷實在是莫名其妙,我以後還是用『交談內容'來指代它把。
如果你通過客戶程式傳送乙個請求,那麼你需要構造乙個 wsmessage 的例項,並且用 xml形式的交談內容填寫好這個例項。對應請求的回應,也還是乙個『交談內容'會通過你的程式返回,並且返回的東西也仍然是乙個 wsmessage 例項。
也就是說,你的客戶端函式掉應乙個網路服務,那麼他的返回值也是乙個 wsmessage 例項。
你可以在乙個函式中傳送請求,呼叫網路服務的程式,並且把返回內容放在 wsmessage例項中,並且讓函式返回這個 wsmessage例項。
wsmessage 更傾向於傳送和接受比較複雜的內容比如有附件什麼的。下面就來詳細解釋一下如何使用 wsmessage 來實現客戶端和服務端的交流。
處理交談內容:
在此之前已經講解過如何使用 php來建立網路服務,並且已經做了乙個簡單的客戶 -服務端程式來說明工作流程。但是這些程式並沒有深入的解釋我們怎麼處理『交談內容'。換句話來說,我們只是把 xml格式的交談內容傳送到了服務端,但並沒有想到去處理它。在這裡,我們來詳細的解釋一下如何處理交談內容並且把它用到計算程式中去。
交談內容是乙個商業邏輯定義的內容,並且用 soap( ****** object access protocol)來封裝的,(請參見 soap w3c的文章)。讓我們用個例子來說明如何計算乙個階乘吧。
客戶端需要傳送的交談內容: 6
服務端需要明白這個交談內容並且把變數分辨出來並且計算它的階乘。下面就是服務端程式:
function getfactorial ( $message )
第 3行,我們用輸入的『交談內容'建立了乙個 ******xmlelement 的例項。你可以看到,輸入的交談內容被儲存到了通過函式引數傳遞進來的 wsmessage 例項 $message的 str變數中。注: ******xml是乙個 php的擴充套件,用於處理 xml檔案或者字串。 wso2 wsf/php並沒有規定我們必須使用哪乙個 php擴充套件來處理 xml。你可以使用你喜歡的人和 xml p程式設計客棧hp 擴充套件來處理,比如 domdocument, saxdom之類。
第 4行將交談內容中的引數值提取出來,這表示服務程式需要知道如何理解這些引數,比如說引數型別之類的東西。(正常來說需要在交談內容中說明這個引數的型別)。函式中剩下的就是正常的處理階乘。在第六行,階乘通過呼叫其他函式被計算出來。從 8到 12行,回覆的交談內容也被寫好並且準被返回此內容。第 14行我們返回回覆的交談內容。
回覆的交談內容應該差不多是這樣的:
720
同樣的,客戶端也可以用同樣的方法處理回覆的交談內容:
$response = $client -> request ( $reqestpayloadstring ) ;
$******xml = new ******xmlelement ( $response -> str ) ;
echo "result = " . $******xml -> result [ 0 ] . "
" ;
在第 3行,用回覆的交談內容建立了乙個 ******xmlelement 例項。同樣的 $response 也是乙個 wsmessage的例項,我們可以訪問他的成員變數 str,這個變數儲存了 xml格式的回覆的交談內容。我們把它交給乙個 ******xmlelement 建構函式,由此建立乙個 ******xmlelement的例項。然後我們就可以訪問結果元素 (或者叫節點? element, xml裡面可以稱之為元素,但對於樹狀結構的它來說,節點也不為過? )
現在你應該學會如何處理交談資訊中的內容,不管是客戶端的申請也好還是服務端的回應也好。
注:在服務端的 getfactorial函式 (14行 ),你可以之間返回乙個 wsmessage而不是乙個回覆的交談內容。你可以用下面的這一小段程式來實現這個功能。
$outmessage = new wsmessage( $responsepayloadstring );
return $outmessage ;
這其實也就是說服務端程式及可以返回 xml格式的交談內容也可以返回 wsmessage的例項
完整的程式將在這篇文章的末尾附上。
跟蹤訊息
通過 wso2 web services framework for php ,你可以跟蹤 soap訊息被客戶端發出,然後客戶端又收到了來自服務端的訊息,(即他們的交談內容)。網路客戶服務類, wsclient 有兩個函式可以實現這個目的: getlastreauest()和 getlastresponse()。客戶端在使用 request()這個函式以後,你可以通過這兩個函式去得到交談資訊。
$response = $client -> request ( $reqestpayloadstring ) ;
printf ( "
request = %s " ,
htmlspecialchars ( $client -> getlastrequest ())) ;
printf ( "
response = %s " ,
htmlspecialchars ( $client -> getlastresponse ())) ;
以上的程式片段會顯示 request()這個函式實現的請求與回覆的內容。
實際上,這段程式差不多會輸出這樣的東西:
request = 6
response = pe xmlns:soapenv=""> 720
跟蹤 soap訊息對於研究呼叫的服務是非常有用的,特別是對於查詢服務和客戶端的 bug。比如說,你可以確認所有的客戶端發出的訊息以及服務端回覆的訊息,並且,你可以確認交談內容的格式 (客戶端的以及服務端的。 )
debugging(這個詞是如此的普遍,那麼我在這裡就不翻譯它了,儘管我的夢想是有一天程式用中文來寫,顯而易見的是這個夢已經離我們越來越遙遠。 )
使用者在使用 php wsf有時會碰到兩個問題:
安裝 wsf。 你怎麼能確定這個 wsf已經正常工作了?好吧,第一,你可以通過 phpinfo()這個函式來檢查, (要是你不知道這個函式以及怎麼使用它,呃,查查 php手冊吧。 ) 你只需要建立乙個 php檔案,並且在上面寫下這幾句話,然後用個瀏覽器開啟它。
<?php
phpinfo () ;
?>
如果所有的擴充套件都被正確的安裝的話,你會找到乙個專案叫 wsf,在乙個以 wsf作為標題的表裡,你應當看到 'wsf support'之類的字樣。這個東東是在 php.ini裡定義的,(或者比如說我就沒有在 php.ini 裡面定義而是在 /etc/php5/conf.d/裡寫了乙個新的檔案叫做 wsf.ini,實際上這個資料夾裡面所有的檔案到後來都會被合併到 php.ini裡,所有如果你沒有在 php.ini裡找到相應的設定但是你的 wsf缺能用,你不妨來這裡看看。 )
如果這個擴這沒有顯示在 phpinfo裡,那麼你需要去找安裝指南來好好研究一下,如果找不到可以給我發 email: [email protected]
當你成功的安裝了以後,第二個問題就是你好像並不能讓這個例子正確執行。同樣的,你需要檢查一些設定是否正確。 首先是 php.ini記錄中,經常會設定一些日誌檔案的路徑,也許他不存在或者是說他設定的路徑 php5無法讀寫。還有,你應到確認 php.ini是否包含了一些指令碼檔案,而這些指令碼檔案都是可讀的。
如果以上的這些都是正確的但是 wsf就是不幹活,你可以檢視一下日誌檔案。日誌檔案會被寫到 wsf.log_path這條記錄所確定的路徑中。這個東東在 php.ini裡進行設定。如果他沒有被設定,那麼 log就在 /tmp裡( linux)。需要知道的是,在 windows平台中,預設的路徑很可能不存在,因此你必須為他指定乙個日誌路徑。和服務有關的日誌記錄在 wsf_php_server.log中,和客戶端有關的儲存在 wsf_php_client.log中,如果你的客戶機和服務主機不是一台機器,那麼這兩個檔案都在伺服器上哦。你可以通過調節記錄的等級來獲得不同詳細程度的日誌檔案。如果是除錯,你可以把它設定為 level 4,當然如果是成熟的軟體,你可以設定為 0(僅僅是嚴重錯誤)或者是 1(錯誤)。
如果你想確認來往的交談內容( soap)是你所想要的格式的話,你可以用 soap 訊息跟蹤來除錯,正如我們前面所講的。
總結:
在這篇文章中,我解釋了 wsmessage這個類以及怎樣處理交談內容並且使用它,客戶端或者服務端都可以通過呼叫 str這個 wsmessage的成員變數來獲得交談內容( xml)。通常交談內容的格式都是通過 wsdl來定義的,因此我們要求客戶端和服務端需要遵守同樣的格式是合理的。下一章我們會討論如何通過 wso2 wsf/php和 wsdl協同工作 .
本文標題: 使用php來實現網路服務
本文位址: /wangluo/php/51399.html
網路服務 NFS服務
1.概述 2.nfs和rpc的關係 3.nfs server和nfs client的通訊過程 1 首先伺服器端開啟rpc服務,並開啟111埠 2 啟動nfs服務,並向rpc服務進行埠的註冊 3 客戶端啟動rpc服務,向服務端的rpc服務請求伺服器的nfs埠 4 服務端的rpc服務反饋nfs服務的埠資...
linux網路服務
apache 涉及的軟體包 涉及的協議 埠 80 服務的工作路徑 配置檔案 listen 80 服務啟動之後監聽哪個埠 include conf.d conf 包含子配置檔案 user apache 服務執行的時候的程序身份 group apache 如果啟動httpd的時候報錯 停止 httpd ...
DHCP網路服務
etc resolv.conf 檔案 主配置檔案 etc dhcp dhcpd.conf 執行程式 usr sbin dhcpd usr sbin dhcrelay 服務指令碼 etc init.d dhcpd etc init.d dhcrelay 執行引數配置 etc sysconfig dhc...