一、Socket總結
1、Socket簡介
在計算機通信領域,Socket 被翻譯爲“套接字”,它是計算機之間進行通信的一種約定。通過 Socket 這種約定,一臺計算機可以接收其他計算機的數據,也可以向其他計算機發送數據。
圖中可以看到Socket是應用層與TCP/IP協議族通信的中間軟件抽象層,就是提供了tcp/ip協議的抽象,對外提供了一套接口,同過這個接口就可以統一方便的使用tcp/ip協議的功能。
2、Socket常用方法圖解
3、Socket網絡通信流程
4、Java中Socket使用舉例
在Java中,我們使用Socket有兩種,一個是基於TCP的Socket,一個是基於UDP的DatagramSocket,本篇只分析基於TCP的Socket。現在我們來看Socket的使用:
客戶端:指明主機端口創建Socket,獲取輸出流,寫入數據。
Socket socket = null;
OutputStream os = null;
try {
socket = new Socket("192.168.1.106",9200);
os = socket.getOutputStream();
os.write("hello server !".getBytes());
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(os != null){
os.close();
}
if(socket != null){
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
服務端:指明綁定的端口,創建ServerSocket,開啓端口監聽。
ServerSocket serverSocket;
try {
serverSocket = new ServerSocket(9200);
} catch (IOException e) {
return;
}
while (isRunning){
try {
Socket client = serverSocket.accept();
handleClient(client);
} catch (IOException e) {
e.printStackTrace();
}
}
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
這裏只是一個簡單的示例,當然實際開發中可能需要更多的東西,比如在handleClient(client)處理數據的時候加入線程池去處理,以及client的關閉等,這裏只是簡單的使用。
二、WebSocket總結
1、WebSocket簡介
WebSocket 是 HTML5 一種新的應用層協議,它實現了瀏覽器與服務器全雙工通信,能更好的節省服務器資源和帶寬並達到實時通訊。
在 WebSocket API 中,瀏覽器和服務器只需要完成一次握手,兩者之間就直接可以創建持久性的連接,並進行雙向數據傳輸。
在此WebSocket 協議中,爲我們實現即使服務帶來了兩大好處:
a. Header
互相溝通的Header是很小的-大概只有 2 Bytes
b. Server Push
服務器可以主動傳送數據給客戶端
2、WebSocket作用
WebSocket可以實現網站即時通訊技術,替代輪詢
網站上的即時通訊是很常見的,比如網頁的QQ,聊天系統等。按照以往的技術能力實現即時通訊通常是採用輪詢、Comet技術解決。
HTTP協議是非持久化的,單工的網絡協議,在建立連接後只允許瀏覽器向服務器發出請求後,服務器才能返回相應的數據。當需要即時通訊時,通過輪詢在特定的時間間隔(如1秒),由瀏覽器向服務器發送Request請求,然後將最新的數據返回給瀏覽器。這樣的方法最明顯的缺點就是需要不斷的發送請求,而且通常HTTP request的Header是非常長的,爲了傳輸一個很小的數據 需要付出巨大的代價,是很不合算的,佔用了很多的寬帶。而最比較新的技術去做輪詢的效果是Comet – 用了AJAX。但這種技術雖然可達到全雙工通信,但依然需要發出請求。
然而WebSocket全雙工通信協議的出現可以彌補這一缺點。在WebSocket中,瀏覽器和服務器只需要要做一個握手的動作,然後,瀏覽器和服務器之間就形成了一條快速通道。兩者之間就直接可以數據互相傳送。
3、WebSocket與Socket的區別
Socket其實並不是一個協議,就是提供了tcp/ip協議的抽象,對外提供了一套接口,同過這個接口就可以統一方便的使用tcp/ip協議的功能。
Socket是應用層與TCP/IP協議族通信的中間軟件抽象層,它是一組接口。在設計模式中,Socket其實就是一個門面模式,它把複雜的TCP/IP協議族隱藏在Socket接口後面,對用戶來說,一組簡單的接口就是全部,讓Socket去組織數據,以符合指定的協議。
WebSocket則是Html5開始提供的一個典型的應用層協議,可以用來實現網站的即時通訊。
補充:現在大多數的手機即時通訊app基本都是通過XMPP協議來實現的,服務器端比如 Netty + openfire等等。