国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

gsoap中文文檔(5.gSoap2.x版與gSOAP 1.x版的不同)

2019-11-18 11:28:13
字體:
來源:轉載
供稿:網友

5. gSoap2.x版與gSOAP 1.x版的不同
 假如你是從1.x版升級到2.x版,請注重下面的內容。
 gSOAP2.0及之后的版本是在1.x版基礎上重寫的。gSOAP2.0之后的版本是線程安全的,但之前版本不是。gSOAP2.x版本中的主要文件已經重新命名,以便與1.x版區分。

gSOAP 1.X  gSOAP 2.X 
soapcpp  soapcpp2 
soapcpp.exe  soapcpp2.exe 
stdsoap.h  stdsoap2.h 
stdsoap.c  stdsoap2.c 
stdsoap.cpp  stdsoap2.cpp 
 
 從1.x版升級到2.x版并不需要進行大量的代碼重寫工作。所有2.x版相關的函數都定義在stdsoap2.c[pp]文件中,這個文件是由gSOAP編譯器自動生成的。所以,用1.x版開發的服務端或客戶端代碼需要進行修改以適應2.x版中函數的變化:在2.x版中,所有的gSOAP函數都增加了一個參數用來保存一個gSOAP運行環境實例。這個參數包括了文件描述,表,緩沖,標志位等,它在所有gSOAP函數中都是第一個參數。
 gSOAP運行環境實例是一個strUCt soap類型的變量。當客戶端程序訪問遠程方法前或當服務端程序能夠接收一個請求前,必須先將這個運行環境變量初始化。在2.x版中新增了3個函數來負責這些事情:
 函數                        解釋
 soap_init(struct soap *soap)         初始化環境變量(只需執行一次)
 struct soap *soap_new()            定義并初始化環境變量并返回一個該變量的指針
 struct soap *soap_copy(struct soap *soap)   定義一個環境變量并從已有的環境變量中拷貝環境信息
 
  環境變量定義好后就可以重復使用而不必再次初始化了。只有當線程獨占訪問時,我們才需要一個新的環境變量。例如,下面的代碼分配了一個用于多個遠程方法的環境變量:
 int main()
{
   struct soap soap;
   ...
   soap_init(&soap); // 初始化環境變量
   ...
   soap_call_ns__method1(&soap, ...); // 調用一個遠程方法
   ...
   soap_call_ns__method2(&soap, ...); // 調用另一個遠程方法
   ...
   soap_end(&soap); // 清除環境變量
   ...
}
 我們也可以像下面這樣定義環境變量:
 int main()
{
   struct soap *soap;
   ...
   soap = soap_new(); // 定義并初始化環境變量
   if (!soap) // 假如不能定義,退出
   ...
   soap_call_ns__method1(soap, ...); // 調用遠程函數
   ...
   soap_call_ns__method2(soap, ...); // 調用另一個遠程函數
   ...
   soap_end(soap); // 清除環境變量
   ...
   free(soap); // 釋放環境變量空間
}
 
 服務端代碼在調用soap_serve函數前,需要定義相關環境變量:

int main()
{
   struct soap soap;
   soap_init(&soap);
   soap_serve(&soap);

 或者像下面這樣:

int main()
{
   soap_serve(soap_new());

 soap_serve函數用來處理一個或多個(當答應HTTP keep-alive時,參見18.11節中的SOAP_IO_KEEPALIVE標志)請求。
 一個web服務可以用多線程技術來處理請求:
int main()
{
   struct soap soap1, soap2;
   pthread_t tid;
   ...
   soap_init(&soap1);
   if (soap_bind(&soap1, host, port, backlog) < 0) exit(1);
   if (soap_accept(&soap1) < 0) exit(1);
   pthread_create(&tid, NULL, (void*(*)(void*))soap_serve, (void*)&soap1);
   ...
   soap_init(&soap2);
   soap_call_ns__method(&soap2, ...); // 調用遠程方法
   ...
   soap_end(&soap2);
   ...
   pthread_join(tid, NULL); // 等待線程結束
   soap_end(&soap1); // 釋放環境變量



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 梁山县| 翁牛特旗| 广平县| 涞水县| 明溪县| 安徽省| 炎陵县| 凤阳县| 怀来县| 永济市| 利川市| 曲水县| 新民市| 赣榆县| 邛崃市| 望城县| 南和县| 青神县| 靖西县| 长兴县| 泾源县| 邓州市| 体育| 高淳县| 加查县| 永吉县| 崇信县| 华安县| 电白县| 漳平市| 英德市| 永丰县| 濮阳市| 朔州市| 清徐县| 锡林浩特市| 静安区| 新郑市| 施甸县| 太保市| 紫云|