亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

【Node之web通信Socket.IO】

xzavier / 3444人閱讀

摘要:簡介是的一個模塊,他提供通過進行通信的一種簡單方式,協(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手冊】

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連接時
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

相關(guān)文章

  • Web Socket & Socket.io

    摘要:但是,反過來卻是不可能的服務(wù)器端發(fā)生了一個事件,服務(wù)器無法將這個事件的信息實時主動通知它的客戶端。這種做法是無奈之舉,實際上對服務(wù)器客戶端雙方都造成了大量的性能浪費。用于發(fā)送,用戶接受。 HTTP HTTP無法輕松實現(xiàn)實時應(yīng)用: HTTP協(xié)議是無狀態(tài)的,服務(wù)器只會響應(yīng)來自客戶端的請求,但是它與客戶端之間不具備持續(xù)連接。 我們可以非常輕松的捕獲瀏覽器上發(fā)生的事件(比如用戶點擊了盒子),...

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

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

    王偉廷 評論0 收藏0
  • WebSocketSocket.IO

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

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

    摘要:但是需要注意的一點是協(xié)議是建立在協(xié)議基礎(chǔ)之上的,需要經(jīng)過一次握手。所以連接的發(fā)起方仍是客戶端。是一個簡潔而靈活的應(yīng)用框架提供一系列強大特性幫助你創(chuàng)建各種應(yīng)用。這也是為什么要采用協(xié)議來實現(xiàn)聊天室的原因。 從開始寫到完善差不多斷斷續(xù)續(xù)差不多半個月時間,雖然還沒有打到想要的效果但還是階段性總結(jié)一下。(下一步加入打算視頻通訊功能)本文默認你已掌握 node 相關(guān)基礎(chǔ)知識 GitHub地址:ht...

    fjcgreat 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<