1. 程式人生 > >web前端技術基礎課程講解之淺談對soket的理解

web前端技術基礎課程講解之淺談對soket的理解

淺談對soket的理解

定義:

網路上的兩個程式通過一個雙向的通訊鏈實現資料的交換,這個連結的一端就成為Socket

它是程序通訊的一種,即呼叫這個網路庫的api函式實現分佈在不同主機相關程序之間的資料交換,依照tcp/ip協議分給每個主機的網路地址,如果兩個主機要進行通訊,任何一個程序都要首先知道對方的網路地址,也可以說是對方的IP。

埠號用來辨別本地程序,一個本地的程序通訊時,,都要佔用一個埠號,不同的程序埠號不同,因為在本地程序進行之前,首先要分配一個沒有被佔用的埠號,。

連結:是指兩個程序通訊之間的鏈路。

實現原理:

在TCP/IP網路應用中,通訊的兩個程序之間的主要模式為客戶/伺服器端(即client/server C/S)模式,即客戶端向伺服器發出服務請求,伺服器收到請求以後,向客戶端提供相應的服務,C/S模式建立需要的兩個條件:(1)網路中軟硬體資源,運算能力,資訊不均等,需要共享(2)連個網路程序是完全非同步的,需要一種機制為通訊的程序間建立關係,為兩者的資料交換提供同步,這就是基於C/S模式的TCP/IP;

工作過程:

伺服器啟動,根據請求提供相應的服務(1)開啟一通訊通道,告知本地主機,它願意在公認的某一埠接受客戶請求(2)請求客戶請求到達埠(3)收到客戶請求,處理併發出應答訊號,接收到併發出應答請求,這需要出發一個新的程序來處理這個客戶請求,這個程序不需要發出應答,服務處理完成後,關閉新程序與客戶端的鏈路(4)返回第(2)步,等待另一客戶端發來請求

關閉伺服器:

(1)開啟一個通訊通道,連線到伺服器所在的主機埠號,(2)向伺服器傳送伺服器報文,等待並接收應答,繼續傳送報文(3)請求結束後,關閉通道

過程總結:客戶端和伺服器端是不對等的,所以兩端的程式碼時不同的,伺服器程序一般是先啟動的,只要系統執行,該伺服器程序一直存在,除非正常或者被迫中止

基於net 模組實現通訊

Node.js的net模組提供了一些底層通訊的小工具,其中包括建立C/S模式的方法

伺服器端程式碼

var net=require('net')

var server=new net.createServer();

//用來存放多個socket使用者物件的集合

var obj=new Object()

//流水賬號--保證使用者不重複

var i=0;

server.on('connection',(client)=>{

client.name=++i;

obj[client.name]=client

// client==像伺服器傳送資料的socket物件

client.on('data',(data)=>{

console.log('客戶端發來:--'+data)

huifu(data,client)

})

})

function huifu(message,client){

// client.write('伺服器已經收到')

for (let i in obj) {

obj[i].write(client.name+'說:'+message)

}

}

server.listen(3000)

客戶端程式碼

var net=require('net')

var readline=require('readline')

//建立socket物件

var client=new net.Socket();

var port=3000;

var hostname='localhost';

client.connect(port,hostname,()=>{

client.write('hello 客戶端已經上線')

})

client.on('data',(data)=>{

console.log('收到伺服器回覆:--'+data)

say()

})

var r1=new readline.createInterface({

input:process.stdin,

output:process.stdout

})

function say(){

r1.question('請輸入要傳送的內容:',(str)=>{

client.write(str)

})

}

Websoket

是h5提供的一種雙工通訊的協議,而且目前所有流行的瀏覽器都支援這個協議

new WebSocket("ws://echo.websocket.org");申請一個WebSocket物件,引數是需要連線的伺服器端的地址,WebSocket物件一共支援四個訊息 onopen, onmessage, onclose和onerror。當Browser和WebSocketServer連線成功後,會觸發onopen訊息;如果連線失敗,傳送、接收資料失敗或者處理資料出現錯誤,browser會觸發onerror訊息;當Browser接收到WebSocketServer傳送過來的資料時,就會觸發onmessage訊息,引數evt中包含server傳輸過來的資料;當Browser接收到WebSocketServer端傳送的關閉連線請求時,就會觸發onclose訊息。我們可以看出所有的操作都是採用訊息的方式觸發的,這樣就不會阻塞UI,使得UI有更快的響應時間,得到更好的使用者體驗