摘要:簡介是的一個模塊,他提供通過進行通信的一種簡單方式,協(xié)議很復(fù)雜,但是提供了服務(wù)器和客戶端雙方的組件,所以只需要一個模塊就可以給應(yīng)用程序加入對的支持。而且還能支持不同的瀏覽器。它們之間有什么區(qū)別呢區(qū)別在于的是持久性的。
環(huán)境:Node v8.2.1; Npm v5.3.0; OS Windows10
在web開發(fā)中,我們使用HTTP協(xié)議,HTTP協(xié)議是基于文本的“單向”通訊機制,當(dāng)我們想要從服務(wù)端獲取數(shù)據(jù)的時候目前首選當(dāng)然是Ajax,Ajax無疑是動態(tài)Web頁面的一個重大發(fā)展,他不再需要我們即使更新一點內(nèi)容,也需要刷新整個頁面了,但是當(dāng)我們在服務(wù)端將數(shù)據(jù)推送到客戶端的時候,Ajax就顯得力不從心了。如果我們使用Socket構(gòu)建一個雙向的機制,那么服務(wù)端向客戶端推送數(shù)據(jù)也就簡單了。
1、Socket.IO簡介Socket.IO是Node.js的一個模塊,他提供通過WebSocket進行通信的一種簡單方式,WebSocket協(xié)議很復(fù)雜,但是Socket.IO提供了服務(wù)器和客戶端雙方的組件,所以只需要一個模塊就可以給應(yīng)用程序加入對WebSocket的支持。而且還能支持不同的瀏覽器。
【API手冊】
server.js
const http = require("http"), io = require("socket.io"); const server = http.createServer((req, res) => { res.end(); }).listen(3000); // 交由 Socket.io 接管 const socket=io.listen(server); // 客戶端socket連接時 socket.on("connection",client=>{ console.log("web connected"); })
上面代碼中,當(dāng)客戶端連接時,服務(wù)端會同時觸發(fā)兩個事件:server.onRequest 和 Socket.onConnection。它們之間有什么區(qū)別呢?區(qū)別在于 Socket 的是持久性的。
index.html
上面代碼中,我們先執(zhí)行server.js,然后再瀏覽器中訪問index.html的時候控制臺會打印"web connected"
2.2 向客戶端推送數(shù)據(jù)server.js
const http = require("http"), io = require("socket.io"); const server = http.createServer((req, res) => { res.end(); }).listen(3000); const socket = io.listen(server); socket.on("connection", client => { client.send("welcome") })
上面服務(wù)端代碼,在有客戶端socket成功連接之后會向客戶端推送一個“welcome”。
index.html
2.3 廣播消息
上面是對單個客戶端的消息推送,當(dāng)我們有客戶端連接的時候如果我們想對所有正在連接的客戶端發(fā)送消息的時候,也就是廣播消息。Socket.IO中提供了API可以很簡單的實現(xiàn)廣播
server.js
const http = require("http"), io = require("socket.io"); const server = http.createServer((req, res) => { res.end(); }).listen(3000); const socket = io.listen(server); socket.on("connection", client => { //廣播消息 client.broadcast.send("新用戶上線了"); })
【注意??!】這兒的廣播消息不會廣播自己
2.4 多個Socket連接上面的例子中都是一個頁面只有一個Socket的連接,這兒列舉一個多Socket連接的例子
server.js
const http = require("http"), io = require("socket.io"); const server = http.createServer((req, res) => { res.end(); }).listen(3000); const socket = io.listen(server); //針對特定的socket連接 socket.of("/hello").on("connection",client=>{ client.send("hello") }) socket.of("/msg").on("connection",client=>{ client.send("msg") })
index.html
上面代碼中在一個頁面中建立了兩個WebSocket連接
END
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/88955.html
摘要:但是,反過來卻是不可能的服務(wù)器端發(fā)生了一個事件,服務(wù)器無法將這個事件的信息實時主動通知它的客戶端。這種做法是無奈之舉,實際上對服務(wù)器客戶端雙方都造成了大量的性能浪費。用于發(fā)送,用戶接受。 HTTP HTTP無法輕松實現(xiàn)實時應(yīng)用: HTTP協(xié)議是無狀態(tài)的,服務(wù)器只會響應(yīng)來自客戶端的請求,但是它與客戶端之間不具備持續(xù)連接。 我們可以非常輕松的捕獲瀏覽器上發(fā)生的事件(比如用戶點擊了盒子),...
摘要:異步最佳實踐避免回調(diào)地獄前端掘金本文涵蓋了處理異步操作的一些工具和技術(shù)和異步函數(shù)。 Nodejs 連接各種數(shù)據(jù)庫集合例子 - 后端 - 掘金Cassandra Module: cassandra-driver Installation ... 編寫 Node.js Rest API 的 10 個最佳實踐 - 前端 - 掘金全文共 6953 字,讀完需 8 分鐘,速讀需 2 分鐘。翻譯自...
摘要:當(dāng)數(shù)據(jù)發(fā)生變化,便將數(shù)據(jù)發(fā)送給。與網(wǎng)絡(luò)應(yīng)用中,兩個應(yīng)用程序同時需要向?qū)Ψ桨l(fā)送消息的能力即全雙工通信,所利用到的技術(shù)就是,其能夠提供端對端的通信。其不僅支持,還支持許多種輪詢機制以及其他實時通信方式,并封裝了通用的接口。 WebSocket 與 Socket.IO 最近小組在做一個智慧交通的項目,其中有個 分享屏幕 的功能,即一個 client 能夠?qū)⒆约寒?dāng)前的頁面分享到另外一個 cli...
摘要:但是需要注意的一點是協(xié)議是建立在協(xié)議基礎(chǔ)之上的,需要經(jīng)過一次握手。所以連接的發(fā)起方仍是客戶端。是一個簡潔而靈活的應(yīng)用框架提供一系列強大特性幫助你創(chuàng)建各種應(yīng)用。這也是為什么要采用協(xié)議來實現(xiàn)聊天室的原因。 從開始寫到完善差不多斷斷續(xù)續(xù)差不多半個月時間,雖然還沒有打到想要的效果但還是階段性總結(jié)一下。(下一步加入打算視頻通訊功能)本文默認你已掌握 node 相關(guān)基礎(chǔ)知識 GitHub地址:ht...
閱讀 3025·2021-10-14 09:42
閱讀 3810·2021-08-11 11:19
閱讀 3616·2019-08-30 13:57
閱讀 3215·2019-08-30 13:49
閱讀 1612·2019-08-29 18:38
閱讀 962·2019-08-29 13:16
閱讀 1910·2019-08-26 13:25
閱讀 3295·2019-08-26 13:24