成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【Node之web通信Socket.IO】

xzavier / 3408人閱讀

摘要:簡(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è)】

2、一些例子 2.1 基礎(chǔ)應(yīng)用

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

相關(guān)文章

  • Web Socket & Socket.io

    摘要:但是,反過來(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)擊了盒子),...

    gougoujiang 評(píng)論0 收藏0
  • node技術(shù)棧 - 收藏集 - 掘金

    摘要:異步最佳實(shí)踐避免回調(diào)地獄前端掘金本文涵蓋了處理異步操作的一些工具和技術(shù)和異步函數(shù)。 Nodejs 連接各種數(shù)據(jù)庫(kù)集合例子 - 后端 - 掘金Cassandra Module: cassandra-driver Installation ... 編寫 Node.js Rest API 的 10 個(gè)最佳實(shí)踐 - 前端 - 掘金全文共 6953 字,讀完需 8 分鐘,速讀需 2 分鐘。翻譯自...

    王偉廷 評(píng)論0 收藏0
  • WebSocketSocket.IO

    摘要:當(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...

    snifes 評(píng)論0 收藏0
  • socket.io+express實(shí)現(xiàn)聊天室的思考(一)

    摘要:但是需要注意的一點(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...

    fjcgreat 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<