ajax的數據傳輸是單向的,客戶端和服務端沒有連接-----客戶端建立連接發送請求----服務器端沿着建立的連接返回相應----斷開連接
websocket則是可以在客戶端和服務器端進行雙向的數據接收和發送
打個比方:小明在客廳看電視,小明的媳婦在衛生間洗衣服,小明的爸爸在書房看報紙,小明的媽媽在廚房做飯;小明的爸爸餓了,問小明:飯做好了么?這時小明只能去詢問媽媽:飯做好了么,小明的媽媽回復小明說沒做好,小明轉而回復爸爸:飯沒做好。如果按照ajax的習慣現場狀態就變成了這樣:小明的爸爸沒過一秒鍾問小明一次飯做沒做好,小明只能一遍一遍的詢問媽媽飯做沒做好,然后不厭其煩的轉達給爸爸;在整個一個過程中小明充當了服務器的角色,客戶端(小明的爸爸)發出請求,服務器(小明)接收數據然后從數據庫中(小明的媽媽)獲取信息,再轉達給小明的爸爸,才能達到實時展示信息的過程。然而引入websocket后,現場情況轉變成了:小明的爸爸問小明:飯做好了沒,小明轉告媽媽:飯好了告訴爸爸一生,然后小明的媽媽把飯做好了直接告訴小明的爸爸:飯做好;
忽略上面我拙劣的例子,下面接着來看websocket
運行環境:基於node 安裝
安裝:npm install socket.io
工作流程:
服務器端 接收 connection 接收完了之后進行emit(發送)
客戶端 需要connect
服務器端使用 nodejs語句編寫:
var http=require('http'); var fs=require('fs'); var io=require('socket.io'); var httpObj=http.createServer(function(req,res){ }); httpObj.listen(8080); var ws=io.listen(httpObj); //服務器端接收數據 ws.on('connection',function(socket){ setInterval(function(){ socket.emit('time',Date.now()); },1000); socket.on('khd',function(name,content){ console.log(name,content); }); });
客戶端語句編寫:
客戶端處理:
var ws=io.connect('ws://localhost:8081');
客戶端接收數據:
ws.on('time',function(result){
console.log(result);
});
客戶端向服務器端發送數據:
ws.emit('kind','','');
服務器端接收:
soket.on('kind',function(name,content){
console.log(name,content);
});
