0.引言
本篇文章主要講解如何在服務端使用websocket。如果在服務端使用websocket,那就需要使用Node.js,就需要安裝nodejs-websocket。也可以參考前面的文章進行學習:
nodejs入門的學習教程:
https://www.runoob.com/nodejs/nodejs-tutorial.html
1.NodeJs簡述
Node.js 是一個基於 Chrome V8 引擎的 JavaScript 執行環境。 Node.js 使用了一個事件驅動、非阻塞式 I/O 的模型。
Node 是一個讓 JavaScript 執行在服務端的開發平臺,它讓 JavaScript 成為與PHP、Python、Perl、Ruby 等服務端語言平起平坐的指令碼語言。 釋出於2009年5月,由Ryan Dahl開發,實質是對Chrome V8引擎進行了封裝。
Node對一些特殊用例進行最佳化,提供替代的API,使得V8在非瀏覽器環境下執行得更好。V8引擎執行Javascript的速度非常快,效能非常好。Node是一個基於Chrome JavaScript執行時建立的平臺, 用於方便地搭建響應速度快、易於擴充套件的網路應用。Node 使用事件驅動, 非阻塞I/O 模型而得以輕量和高效,非常適合在分散式裝置上執行資料密集型的實時應用。。通俗點說,node.js就是執行在服務端的JavaScript。
官網介面如下:
nodejs官網地址:
https://www.npmjs.com/package/nodejs-websocket
官網介面如下:
更詳細的學習,可以參考官網,官網給出的還是比較學習。
2.安裝NodeJs在伺服器端
(1)在指定的工程目錄,執行如下命令:
sudo npm init
or
如果不想使用Enter鍵,使用如下命令:
sudo npm init -y
執行目錄為這樣,連結如下:
執行過程的介面如下:
注意:如果需要要輸入字元的,那就一直輸入回車鍵就行了。
這樣最終會生成這個檔案,如下:
看看package.json是什麼內容,執行如下命令:
cat package.json
package.json內容如下介面:
1.1 安裝nodejs-websocket
安裝nodejs-websocket,在以下路徑:
(1)執行如下命令:
sudo npm install nodejs-websocket
執行過程如下:
這樣就會把websocket相關的元件下載到node_modules。下載後會生成node_modules和package-lock.jaon。
cd node_modules
cd nodejs-websocket/
如果對這些感興趣,可以去看看每個檔案。
2.Node的優點
Node作為一個新興的前端框架,後臺語言,有很多吸引人的地方:
RESTful API
單執行緒
Node可以在不新增額外執行緒的情況下,依然可以對任務進行併發處理 —— Node.js是單執行緒的。它透過事件迴圈(event loop)來實現併發操作,對此,我們應該要充分利用這一點 —— 儘可能的避免阻塞操作,取而代之,多使用非阻塞操作。
非阻塞IO
V8虛擬機器
事件驅動
3.NodeJs的Module
Node使用Module模組去劃分不同的功能,以簡化應用的開發。Modules模組有點像C++語言中的類庫。每一個Node的類庫都包含了十分豐富的各類函式,比如http模組就包含了和http功能相關的很多函式,可以幫助開發者很容易地對比如http,tcp/udp等進行操作,還可以很容易的建立http和tcp/udp的伺服器。
要在程式中使用模組是十分方便的,只需要如下:
在這裡,引入了http類庫,並且對http類庫的引用存放在http變數中了。這個時候,Node會在我們應用中搜索是否存在node_modules的目錄,並且搜尋這個目錄中是否存在http的模組。如果Node.js找不到這個目錄,則會到全域性模組快取中去尋找,使用者可以透過相對或者絕對路徑,指定模組的位置,比如:
var myModule = require('./myModule.js');
模組中包含了很多功能程式碼片斷,在模組中的程式碼大部分都是私有的,意思是在模組中定義的函式方法和變數,都只能在同一個模組中被呼叫。當然,可以將某些方法和變數暴露到模組外,這個時候可以使用exports物件去實現。
參考連結,如下地址:
https://baike.baidu.com/item/node.js/7567977?fromtitle=nodejs&fromid=11244313&fr=aladdin
https://www.npmjs.com/package/nodejs-websocket
官網介面如下:
4.NodeJs重要關注點
對於剛接觸NodeJs,主要關注一些比較重要的點就可以了(需要關注一系列的回撥函式),如下:
(1)怎樣建立websocket伺服器,透過createServer和listen介面。
(2)怎樣判斷有新的連線過來,createServer的回撥函式做判斷。
(3)怎樣判斷關閉事件,透過on("close", callback) 事件的回撥函式。
(4)怎樣判斷接收到資料,透過on("text",callback)事件的回撥函式。
(5)怎樣判斷接收異常,透過on("error",callback)事件的回撥函式。
(9)怎樣主動傳送資料,呼叫sendText。
參考的示例程式碼如下:
var ws = require("nodejs‐websocket") // Scream server example: "hi" ‐> "HI!!!" var server = ws.createServer(function (conn) { console.log("New connection") conn.on("text", function (str) { // 收到資料的響應 console.log("Received "+str) conn.sendText(str.toUpperCase()+"!!!") // 傳送 }) conn.on("close", function (code, reason) { // 關閉時的響應 console.log("Connection closed") }) conn.on("error", function (err) { // 出錯 console.log("error:" + err); }); }).listen(8001)
由上可以知道,依賴回撥函式實現,需要去實現回撥函式。
5.總結