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