日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
HTML5WebSocketsnode.js實(shí)例教程

HTML 5 中WebSockets是極其重要的部分,它的一個(gè)好處之一是減少了不必要的網(wǎng)絡(luò)流量。它主要是用于在客戶機(jī)和服務(wù)器之間建立單一的雙向連接。這意味著客戶只需要發(fā)送一個(gè)請(qǐng)求到服務(wù)端,那么服務(wù)端則會(huì)進(jìn)行處理,處理好后則將其返回給客戶端,客戶端則可以在等待這個(gè)時(shí)間繼續(xù)去做其他工作,整個(gè)過程是異步的。

創(chuàng)新互聯(lián)長期為千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為無極企業(yè)提供專業(yè)的成都做網(wǎng)站、網(wǎng)站制作,無極網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

WebSockets應(yīng)用的場(chǎng)景是很廣泛的,當(dāng)需要實(shí)時(shí)顯示數(shù)據(jù)的時(shí)候(比如股票,實(shí)時(shí)聊天,對(duì)戰(zhàn)游戲等),用戶最期望的是不需要去刷新頁面,否則獲得的用戶體驗(yàn)是不佳的。而在最新的HTML 5標(biāo)準(zhǔn)中,出現(xiàn)了兩個(gè)解決該方面問題的規(guī)范,一個(gè)是服務(wù)端推送事件(Server Sent Events),另外一個(gè)是WebSockets,其中服務(wù)端推送事件由于在IE 中不能獲得原生支持,因此不在本文討論范圍之中。本文著重講解HTML 5中WebSockets的相關(guān)知識(shí)。首先我們還是來復(fù)習(xí)下在HTTP 的網(wǎng)絡(luò)世界中的基本架構(gòu),這是下一步學(xué)習(xí)的基礎(chǔ)。

客戶-服務(wù)器模式是網(wǎng)絡(luò)世界中最經(jīng)典的模式了,能允許多個(gè)用戶通過前端圖形界面的方式去,如下圖:

通常,客戶服務(wù)端模式分為兩層和三層。在三層結(jié)構(gòu)中,通常是出現(xiàn)在web應(yīng)用中,中間一層使用了各類的中間件服務(wù)器,分別如下兩圖所示:

我們來看下HTML 5 WebSocket的架構(gòu)圖,如下:

  

在HTML 5 WebSockets標(biāo)準(zhǔn)中,僅僅定義了一些列的API,這些API用來在客戶端和服務(wù)端之間建立“socket”連接。下面我們來學(xué)習(xí)使用node.js來進(jìn)行WebSockets的學(xué)習(xí)。

首先,到node.js的官網(wǎng)下載node.js,我們選用windows 版本就可以了。

下載安裝包后并選擇socket.io,這只需要在 安裝好的nodejs目錄下,運(yùn)行命令install就可以了,如圖:

#p#

然后,我們?cè)趎odejs目錄下建立一個(gè)簡單的js文件,命名為serverfile.js,然后編寫代碼如下:

 
 
 
 
  1.  var http = require('http');  
  2. var io = require('socket.io');  
  3.    
  4. var yourserver = http.createServer(function (request, response) {  
  5.     response.writeHead(250, { 'Content-Type': 'text/html' });  
  6.     response.end('Your WebSocket server is running');  
  7. }).listen(22222);  
  8.    
  9. var yoursocket = io.listen(yourserver).set('log', 1);  
  10.    
  11. yoursocket.on('connection', function (client) {  
  12.     client.on('message', function (data) {  
  13.         console.log('Client Message: ', data);  
  14.     
  15.         var current = new Date().getTime();  
  16.    
  17.         client.emit('YourMessageResponse', data + '->' + current);  
  18.  
  19. client.on('disconnect', function () {  
  20.  console.log('Your Client disconnected');  
  21. });  
  22.     });  
  23. }); 

然后重新在nodejs的目錄中輸入如下圖的命令,以啟動(dòng)服務(wù)端:

這樣,服務(wù)端就已經(jīng)啟動(dòng)了,下面來編寫客戶端,客戶端其實(shí)就是一個(gè)簡單的html頁面,代碼如下:

 
 
 
 
  1.   
  2.  
  3.  
  4.      
  5.  
  6.  
  7.      
  8.    
  9.     
 
  •      
  •     Send 
  •         
  •      
  •  
  •  
  • 現(xiàn)在假設(shè)服務(wù)端已經(jīng)運(yùn)行后,我們可以直接在瀏覽器中輸入網(wǎng)址運(yùn)行,如下圖:

    這個(gè)時(shí)候表示客戶端已經(jīng)和服務(wù)端連接上了(這個(gè)時(shí)候調(diào)用的是

    HTML5WebSockets.socketio.yoursocket.on的方法)。

    接下來我們?cè)谖谋究蛑休斎胍恍┮l(fā)送到服務(wù)端的信息,并點(diǎn)Send按鈕,則可以從日志信息中看到信息發(fā)送到服務(wù)端的提示,如下兩圖所示: 

    同時(shí)我們也觀察下服務(wù)端的控制臺(tái)的輸出,如下所示:

    可以看到服務(wù)端正確收到了來自客戶段的請(qǐng)求信息。

    從上面的例子可以看到,node.js由于使用了Socket.io 模塊,大大減輕了使用WebSocket的難度,可以說是為WebSocket而生的。

    接下來,我們看下如何對(duì)客戶端進(jìn)行廣播消息?所謂的廣播消息,就是將某個(gè)消息在同一時(shí)間發(fā)送給已連接服務(wù)端的所有客戶端,所有客戶端都能收到該消息。下面我們動(dòng)手改造下服務(wù)端的代碼如下:

     
     
     
     
    1. var http = require('http');  
    2. var io = require('socket.io');  
    3.    
    4. var yourserver = http.createServer(function (request, response) {  
    5.     response.writeHead(250, { 'Content-Type': 'text/html' });  
    6.     response.end('Your WebSocket server is running');  
    7. }).listen(22222);  
    8.    
    9. var yoursocket = io.listen(yourserver).set('log', 1);  
    10.    
    11. yoursocket.on('connection', function (client) {  
    12.     client.on('YourcustomMessage', function (data) {  
    13.         console.log('Client Custom Message: ', data);  
    14.    
    15.         var current = new Date().getTime();  
    16.    
    17.         client.broadcast.emit('YourMessageResponse', data + '(broadcasted)->' + current);  
    18.     });  
    19.     client.on('disconnect', function () {  
    20.         console.log('Your Client disconnected');  
    21.     });  
    22. }); 

    #p#

    可以看到,唯一和之前服務(wù)端代碼不同的是使用了client.broadcast.emit方法,可以從Socket.IO 服務(wù)器將廣播消息發(fā)送給客戶端。并且為了驗(yàn)證我們是在同一時(shí)刻發(fā)送相同的消息給各個(gè)客戶端,我們?cè)O(shè)置了當(dāng)前的時(shí)間到current變量進(jìn)行返回。我們可以將該文件另存為serverfile2.js。然后同樣按上文的方法啟動(dòng)服務(wù)端。

    接下來編寫客戶端代碼如下:

     
     
     
     
    1.  
    2.  
    3.  
    4.      
    5.  
    6.  
    7.      
    8.    
    9.     
     
  •      
  •     Brodcast 
  •    
  •      
  •  
  •  
  • 可以看到客戶端的代碼并沒有多大變化。接下來我們同時(shí)啟動(dòng)多個(gè)瀏覽器打開這個(gè)客戶端的文件,如下圖:

    這表明各個(gè)客戶端都已經(jīng)連接上服務(wù)端了,然后在其中的一個(gè)客戶端頁面中輸入任意內(nèi)容,點(diǎn)發(fā)送,則可以看到服務(wù)端的nodejs控制臺(tái)收到了該消息,并且同時(shí)將當(dāng)前時(shí)間附加到消息中,同時(shí)發(fā)送到各請(qǐng)求的客戶端,實(shí)現(xiàn)了廣播的功能,如下圖:

    讀者可以進(jìn)一步對(duì)上面的nodejs例子進(jìn)行改造,就可以很容易實(shí)現(xiàn)如各類實(shí)時(shí)應(yīng)用了。

    英文原文:HTML5 WebSockets Introduction


    名稱欄目:HTML5WebSocketsnode.js實(shí)例教程
    分享路徑:http://www.5511xx.com/article/djdhsih.html