成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

HTML5 WebSockets node.js實例教程

譯文
開發 前端
HTML 5 中WebSockets是極其重要的部分,它的一個好處之一是減少了不必要的網絡流量。

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

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

客戶-服務器模式是網絡世界中最經典的模式了,能允許多個用戶通過前端圖形界面的方式去,如下圖:

 

通常,客戶服務端模式分為兩層和三層。在三層結構中,通常是出現在web應用中,中間一層使用了各類的中間件服務器,分別如下兩圖所示:

 

 

我們來看下HTML 5 WebSocket的架構圖,如下:

 

  

在HTML 5 WebSockets標準中,僅僅定義了一些列的API,這些API用來在客戶端和服務端之間建立“socket”連接。下面我們來學習使用node.js來進行WebSockets的學習。

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

 

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

 

 

#p#

然后,我們在nodejs目錄下建立一個簡單的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的目錄中輸入如下圖的命令,以啟動服務端:

這樣,服務端就已經啟動了,下面來編寫客戶端,客戶端其實就是一個簡單的html頁面,代碼如下:

  1.  <!DOCTYPE html> 
  2. <html> 
  3. <head> 
  4.     <script src='http://localhost:22222/socket.io/socket.io.js'></script> 
  5. </head> 
  6. <body> 
  7.     <script> 
  8.         var HTML5WebSockets = {};  
  9.         HTML5WebSockets.socketio = {  
  10.             yoursocket: null,  
  11.    
  12.             initialize: function () {  
  13.    
  14.                 HTML5WebSockets.socketio.yoursocket = io.connect('http://localhost:22222');  
  15.    
  16.                 HTML5WebSockets.socketio.yoursocket.on('connect', function () {  
  17.                     HTML5WebSockets.socketio.log('You are connected to Server<br />');  
  18.                 });  
  19.    
  20.                 HTML5WebSockets.socketio.yoursocket.on('message', function (data) {  
  21.                     HTML5WebSockets.socketio.log('Server Response:  ' + data + '<br />');  
  22.                 });  
  23.               
  24.                 HTML5WebSockets.socketio.yoursocket.on('disconnect', function () {  
  25.                     HTML5WebSockets.socketio.log('You are disconnected from Server<br />');  
  26.                 });  
  27.    
  28.                 document.querySelector('#sendMes').onclick = function () {  
  29.                     HTML5WebSockets.socketio.sendMessageToServer(document.querySelector('#mes').value);  
  30.                     document.querySelector('#mes').value = '';  
  31.                 };  
  32.                 
  33.             },  
  34.             sendMessageToServer: function (data) {  
  35.                 HTML5WebSockets.socketio.yoursocket.send(data);  
  36.                 HTML5WebSockets.socketio.log('Message to Server: ' + data + '<br />');  
  37.             },            
  38.    
  39.             log: function (message) {  
  40.                 document.querySelector('#log').innerHTML += message;  
  41.             }  
  42.         }  
  43.     </script> 
  44.    
  45.     <div id='log'></div> 
  46.     <input type='text' id='mes' /> 
  47.     <button type='button' id='sendMes'>Send</button> 
  48.     <br />    
  49.     <script> 
  50.         HTML5WebSockets.socketio.initialize();  
  51.     </script> 
  52. </body> 
  53. </html> 

現在假設服務端已經運行后,我們可以直接在瀏覽器中輸入網址運行,如下圖:

 

 

這個時候表示客戶端已經和服務端連接上了(這個時候調用的是

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

接下來我們在文本框中輸入一些要發送到服務端的信息,并點Send按鈕,則可以從日志信息中看到信息發送到服務端的提示,如下兩圖所示: 

 

 

同時我們也觀察下服務端的控制臺的輸出,如下所示:

 

可以看到服務端正確收到了來自客戶段的請求信息。

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

接下來,我們看下如何對客戶端進行廣播消息?所謂的廣播消息,就是將某個消息在同一時間發送給已連接服務端的所有客戶端,所有客戶端都能收到該消息。下面我們動手改造下服務端的代碼如下:

  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#

可以看到,唯一和之前服務端代碼不同的是使用了client.broadcast.emit方法,可以從Socket.IO 服務器將廣播消息發送給客戶端。并且為了驗證我們是在同一時刻發送相同的消息給各個客戶端,我們設置了當前的時間到current變量進行返回。我們可以將該文件另存為serverfile2.js。然后同樣按上文的方法啟動服務端。

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

  1. <!DOCTYPE html> 
  2. <html> 
  3. <head> 
  4.     <script src='http://localhost:22222/socket.io/socket.io.js'></script> 
  5. </head> 
  6. <body> 
  7.     <script> 
  8.         var HTML5WebSockets = {};  
  9.         HTML5WebSockets.socketio = {  
  10.             yoursocket: null,  
  11.    
  12.             initialize: function () {  
  13.    
  14.                 HTML5WebSockets.socketio.yoursocket = io.connect('http://localhost:22222');  
  15.    
  16.                 HTML5WebSockets.socketio.yoursocket.on('connect', function () {  
  17.                     HTML5WebSockets.socketio.log('You are connected to Server<br />');  
  18.                 });                 
  19.    
  20.                 HTML5WebSockets.socketio.yoursocket.on('YourMessageResponse', function (data) {  
  21.                     HTML5WebSockets.socketio.log('Server Custom Response: ' + data + '<br />');  
  22.                 });  
  23.    
  24.                 HTML5WebSockets.socketio.yoursocket.on('disconnect', function () {  
  25.                     HTML5WebSockets.socketio.log('You are disconnected from Server<br />');  
  26.                 });                 
  27.    
  28.                 document.querySelector('#sendCustMes').onclick = function () {  
  29.                     HTML5WebSockets.socketio.emitCustomMessageToServer(document.querySelector('#custMes').value);  
  30.                     document.querySelector('#custMes').value = '';  
  31.                 };  
  32.             },            
  33.    
  34.             emitCustomMessageToServer: function (data) {  
  35.                 HTML5WebSockets.socketio.yoursocket.emit('YourcustomMessage', data);  
  36.                 HTML5WebSockets.socketio.log('Custom message to Server: ' + data + '<br />');  
  37.             },  
  38.    
  39.             log: function (message) {  
  40.                 document.querySelector('#log').innerHTML += message;  
  41.             }  
  42.         }  
  43.     </script> 
  44.    
  45.     <div id='log'></div> 
  46.     <input type='text' id='custMes' /> 
  47.     <button type='button' id='sendCustMes'>Brodcast</button> 
  48.    
  49.     <script> 
  50.         HTML5WebSockets.socketio.initialize();  
  51.     </script> 
  52. </body> 
  53. </html> 

可以看到客戶端的代碼并沒有多大變化。接下來我們同時啟動多個瀏覽器打開這個客戶端的文件,如下圖:

 

這表明各個客戶端都已經連接上服務端了,然后在其中的一個客戶端頁面中輸入任意內容,點發送,則可以看到服務端的nodejs控制臺收到了該消息,并且同時將當前時間附加到消息中,同時發送到各請求的客戶端,實現了廣播的功能,如下圖:

 

 

讀者可以進一步對上面的nodejs例子進行改造,就可以很容易實現如各類實時應用了。

英文原文:HTML5 WebSockets Introduction

責任編輯:陳四芳 來源: 51CTO
相關推薦

2021-03-16 16:16:41

GeneratorWebsockets前端

2011-12-16 10:08:36

Node.js

2020-05-29 15:33:28

Node.js框架JavaScript

2009-09-18 11:44:05

Scala實例教程Kestrel

2013-11-01 09:34:56

Node.js技術

2015-03-10 10:59:18

Node.js開發指南基礎介紹

2014-02-19 16:28:53

Node.jsWeb工具

2014-08-26 11:46:46

QtAndroid實例教程

2020-03-17 13:24:04

微服務架構數據

2011-09-08 13:46:14

node.js

2011-11-01 10:30:36

Node.js

2011-09-02 14:47:48

Node

2011-09-09 14:23:13

Node.js

2011-11-10 08:55:00

Node.js

2012-10-24 14:56:30

IBMdw

2015-07-15 10:32:44

Node.js命令行程序

2021-12-25 22:29:57

Node.js 微任務處理事件循環

2010-08-17 11:02:45

DIV CSS實例教程

2019-06-17 15:25:17

expandunexpandLinux

2015-06-23 15:27:53

HproseNode.js
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 波多野结衣中文视频 | 中文字幕在线精品 | 亚洲首页| 三级视频在线观看 | 欧美日韩在线视频一区 | 99久久久久久99国产精品免 | 国产精品日韩在线 | 色综合色综合色综合 | 国产精品a久久久久 | 日韩黄色小视频 | 国产一区二区免费 | 亚洲精选一区二区 | 97av| 欧美一级片在线看 | 精品国产一区二区三区久久狼黑人 | 精品欧美一区二区三区久久久 | 一区二区三区四区在线视频 | 国产一区二区免费在线 | 国产午夜精品一区二区三区四区 | 成人亚洲| 久久高清精品 | 成人免费高清 | 欧美视频三区 | 国产一级视频在线观看 | 久久小视频 | 精品一区二区三 | 成人免费视屏 | 人人干视频在线 | 久久久久久国模大尺度人体 | 久久久久久国产一区二区三区 | 久久久av中文字幕 | www.一区二区三区 | 黄色毛片在线看 | 欧美性视频在线播放 | 欧美精品二区三区 | 亚洲一卡二卡 | 在线日韩欧美 | 久久久久久成人 | 成人黄色电影在线观看 | 中文在线www | 人成久久|