WebService 與 Socket 區別

1、WebService

1.什麼是WebService

     Web Service(WEB服務)可以快捷和方便地綜合結合各類系統、商務和任何應用平臺。利用最新的Web Service 標準可以使任何軟件系統和系統之間的應用互通互聯,方便,並且更加廉價。html

 

2.WebService的應用場合

(1)跨越防火牆通訊java

     客戶端和服務器端之間通訊都會有防火牆或者代理服務器。傳統的實現互相通訊的方法是在分佈式對象,如DCOM、CORBA之間進行相互的遠程過程調用(TCP/IP),但在這種場合下HTTP協議的特性沒有獲得應用,所以在Internet環境下的遠程過程調用不是一件容易的事情,同時在Internet上使用遠程過程調用還存在安全問題,防火牆和代理服務器還有可能阻擋這種類型的數據傳輸。HTTP是在Internet上發送消息的標準協議。Web服務使用基於XML消息處理做爲基本的數據通訊方式,應用程序可使用HTTP和XML消息等標準在基於Web的應用程序之間交換信息,從而跨越防火牆。程序員

 

(2)應用程序集成web

     企業裏常常要把不一樣語言寫成的在不一樣平臺上運行的各類程序集成起來。大型公司經常有不少部門,每一個部門都使用最適合本身特定須要的應用程序和平臺。爲了可以讓公司各部門之間進行通訊,首先應該將公司內部的應用程序和商業過程集成在一塊兒。Web服務的開放標準使組織建立可重用的應用程序接口。當被包裝成一個或一組Web服務以後,任何應用程序理論上均可以經過SOAP消息與任何其餘應用程序進行通訊。安全

 

(3)軟件複用服務器

     軟件複用是在軟件開發中避免重複勞動的解決方案。Web服務實現了業務級別的軟件複用,例如在B2B的集成中,各企業之間經過互相調用Web服務,實現了Web服務的共享,Web服務的使用企業不須要再從新開發其餘企業中已經存在的服務。併發

 

2、使用Socket遠程通訊

     image

1.客戶端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public  class  WeatherClient{
 
     public  static  void  main(String[] args) throws  UnknownHostException, IOException{
         
         //1.建立Socket對象,和服務端創建鏈接
         Socket socket = new  Socket( "127.0.0.1" , 12345 );
         
         //2.發送城市名稱
         DataOutputStream dos = new  DataOutputStream(socket.getOutputStream());
         dos.writeUTF( "北京" );
         System.out.println( "請求查詢天氣: 北京" );
         
         //3.接受返回結果使用輸入流
         DataInputStream dis = new  DataInputStream(socket.getInputStream());
         String result = dis.readUTF();
         System.out.println( "北京的天氣: "  + result);
         
         //4.關閉流
         dis.close();
         dos.close();
     }
}

 

2.服務端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/*
  * 天氣服務端
  */
public  class  WeatherServer{
 
     public  static  void  main(String[] args) throws  IOException{
 
         // 1.建立ServerSocket對象
         ServerSocket serverSocket = new  ServerSocket( 12345 );
 
         while ( true ){
 
             // 2.等待客戶端鏈接,阻塞的方法
             final  Socket socket = serverSocket.accept();
             
             Runnable runnable = new  Runnable(){
                 @Override
                 public  void  run(){
                     try {
                         // 3.使用輸入流接受客戶端發送的請求
                         DataInputStream dis = new  DataInputStream(socket.getInputStream());
                         String cityName = dis.readUTF();
                         System.out.println( "接收到客戶端發送的請求: "  + cityName);
                         
                         Thread.sleep( 1000 );
                         
                         // 4.根據城市名查詢天氣
                         String result = "今每天氣很熱" ;
                         System.out.println( "返回天氣信息: "  + result);
 
                         // 5.返回查詢結果,使用輸出流。
                         DataOutputStream dos = new  DataOutputStream(socket.getOutputStream());
                         dos.writeUTF(result);
 
                         // 6.關閉流
                         dis.close();
                         dos.close();
                     } catch (Exception e){
                         e.printStackTrace();
                     }
                 }
             };
             
             //啓動線程
             new  Thread(runnable).start();
             
         }
     }
}

結果:框架

     請求查詢天氣: 北京 
     北京的天氣: 今每天氣很熱socket

     接收到客戶端發送的請求: 北京 
     返回天氣信息: 今每天氣很熱tcp

 

3、用WebService實現遠程調用

1.服務端

第一步: 建立一個java工程,不須要導入jar包。

第二步: 建立接口。在Webservice中叫作SEI(wsdl中叫作PortType)。

第三步: 建立實現類。須要在實現類上加一個@Webservice註解。

第四步: 發佈服務。EndPoint.publish發佈服務。

 

WeatherInterface.java

image

WeatherInterfaceImpl.java

image

WeatherServer.java

image

 

2.查看wsdl

a: 在地址欄輸入(注意後面的參數?wsdl)

http://127.0.0.1:12345/weather?wsdl

b: Wsdl不是webService,只是獲取一個用於描述WebService的說明文件

 

image

 

3.使用wsimport工具生成客戶端調用代碼

image

image

 

4.編寫客戶端

第1步:建立服務視圖對象。

第2步: 從服務視圖中得到PortType對象。

第3步: 調用PortType的方法(能夠實現遠程通訊)

第4步: 接收方法的返回值(服務端響應的結果)。

image

 

4、WebService和Socket的對比

(1)Socket是基於TCP/IP的傳輸層協議。 
Webservice是基於HTTP協議傳輸數據,http是基於tcp的應用層協議。 
Webservice採用了基於http的soap協議傳輸數據。


(2)Socket接口經過流傳輸,不支持面向對象。 
Webservice 接口支持面向對象,最終webservice將對象進行序列化後經過流傳輸。 
Webservice採用soap協議進行通訊,不需專門針對數據流的發送和接收進行處理,是一種跨平臺的面向對象遠程調用技術。

(3)Socket適用於高性能大數據的傳輸,傳輸的數據須要手動處理,socket通訊的接口協議須要自定義。

   好比:自定義一種字符串拼接的格式,好比自定義的xml數據,自定義麻煩之處在接口調用方和接口服務端須要互相討論肯定接口的協議內容,不方便。 
缺點

     程序員須要本身去解析輸入、輸出流,解析發送和接收的數據。數據傳輸的格式不固定,須要程序員開發socket接口時自定義接口協議。

優勢

     若是要傳輸大數據量,socket能夠知足,若是存在大併發使用socket也能夠實現,程序用socket靈活性更大,好比能夠socket的高併發框架mina開發。 

 

Webservcie因爲是遵循標準的soap協議,soap 協議的內容格式固定,soap協議傳遞的內容是xml數據,因爲webservice是基於http的,因此簡單理解爲soap=http+xml,適用於沒有性能要求狀況下且數據傳輸量小,推薦在公開接口上使用webservice,由於soap協議的標準的。 
優勢 
     jaxws能夠經過面向對象開發webservice,程序員不須要解析輸入、輸出流。 
     因爲webservice傳輸數據使用標準的soap協議(基於http傳輸xml),soap協議已經被w3c管理了。 
缺點

 

    若是傳輸大數據量,webservice不適用。若是webservice開發大併發的應用,webservice依靠web容器提升併發數。

轉自:https://www.cnblogs.com/ruiati/p/6632332.html
相關文章
相關標籤/搜索